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] >>