Re: More 1.7 BC issues (porting from 1.5)

Nathan Bubna <[email protected]>
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <CAFyaDjGWOypj9rJMj06jiPqg1n=-0JejzdDfxBuEAPXrxT5yRA@mail.gmail.com>
Ah, it was Sergiu, not Byron.  Here's the relevant discussion:

https://issues.apache.org/jira/browse/VELOCITY-681

On Thu, May 3, 2012 at 12:16 PM, Nathan Bubna <[email protected]> wrote:
> 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.