Re: More 1.7 BC issues (porting from 1.5)

Nathan Bubna <[email protected]>
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <CAFyaDjENbFb76w8WEQemEOnLSx4KZjT-TvOthnG+eHzt1n54Dg@mail.gmail.com>
Ok, for my sanity, is this an accurate rewrite?

#macro( inner $arg )
  #set($ref = '')$arg
#end
#macro( outer )
  #foreach( $ref in ['foo','bar','yok','dar'] )
    #inner( $ref )
  #end
#end
#outer()

Do you get the same behavior in both with this?

#macro( inner $arg )
  #set($ref = '')$arg
#end
#foreach( $ref in ['foo','bar','yok','dar'] )
  #inner( $ref )
#end

Or is it only when the macros are nested?
Also, do you have localscope on for the macros?

I know changes were made in the pass-by-name behavior between 1.5 and
the trunk (2.0-SNAPSHOT), but my memory is failing as to the
chronology of them.  What i do recall (possibly incorrectly), makes me
think this should have been reversed; blank in the older version,
instead of the newer.  I thought we stopped proxying #set calls on
macro args, because while that was arguably a correct way to do
pass-by-name, it was deemed surprising and not worth the
implementation/performance costs.  I seem to recall arguing with
someone about this, maybe Byron?  Well, i'm confused.   I also haven't
the time to fire up Velocity environment right now on this machine to
test it.  Perhaps someone else can step in.

On Thu, May 3, 2012 at 11:51 AM, Boris Partensky
<[email protected]> wrote:
> Not seeing any errors in log. Corrected to 2 single quotes. Same
> behavior. I was hoping that $input in each iteration will not be empty
> string, but rather 'foo', 'bar' etc (that's the way 1.5 behaves). Why
> would setting a value of $type in parent (foreach) scope would affect
> the value of the local $input argument?
>
> String template = "#set($global_types=['foo', 'bar', 'yok',
> 'dar'])#macro( showBox $input)#set($type = '')$input#end"+
>                "#macro(showBoxes $types)#foreach($type in
> $types)#showBox($type)#end#end#showBoxes($global_types)";
>
>
> On Thu, May 3, 2012 at 2:33 PM, Nathan Bubna <[email protected]> wrote:
>> Anything in the log?  #set($type = \"\") is not valid syntax, i think.
>>  I'm not even sure what value you want $type to have.  Two double
>> quotes or an empty string?
>>
>> On Thu, May 3, 2012 at 11:17 AM, Boris Partensky
>> <[email protected]> wrote:
>>> Hi, I have this use case which involves 2 nested macros and a foreach.
>>> I am trying to understand why this template evaluates to empty string
>>> on 1.7, and to "foobaryokdar" - on 1.5.
>>>
>>>
>>> String template = "#set($global_types=['foo', 'bar', 'yok',
>>> 'dar'])#macro( showBox $input)#set($type = \"\")$input#end"+
>>>                "#macro(showBoxes $types)#foreach($type in
>>> $types)#showBox($type)#end#end#showBoxes($global_types)";
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.