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 <boris.parten...@gmail.com> 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 <nbu...@gmail.com> 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 >> <boris.parten...@gmail.com> 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: user-unsubscr...@velocity.apache.org >>> For additional commands, e-mail: user-h...@velocity.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org >> For additional commands, e-mail: user-h...@velocity.apache.org >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > For additional commands, e-mail: user-h...@velocity.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org For additional commands, e-mail: user-h...@velocity.apache.org