From my perusal the way the macro implementation works is that all
parameters passed to a macros are AST, even if they are in quotes.
This is consistent with pass by name. And anyway, if the string was
evaluated before being passed then that doesn't explain the behavior
of the second macro where $i is modified with #set directives instead
of #foreach. Shouldn't the results be the same?
I could simplify the call with no quotes:
#test( [1, 2, 3] #if($i=2)yes#end)
Which with the first macro returns nothing and with the second macro
returns "yes"
But, even without using directives (Which is probably what I should
have done):
#macro(test $x)#foreach($i in [1, 2])$x#end#end
#test($i)
returns: $i$i
#macro(test $x)#set($i = 1)$x #set($i = 2)$x#end
#test($i)
returns: 1 2
On a side note... the following generates a parse error.. Is this
correct?
#macro(test $x)#set($i = 1)$x#set($i = 2)$x#end
Encountered "=" at line 6, column 38 of /foo.vm
Was expecting:
<RPAREN> ...
On Oct 12, 2008, at 19:08 , Will Glass-Husain wrote:
I would have assumed the quoted string would be evaluated before being
passed in to the macro. Hence $i is invalid reference when it is
evaluated,
and we'd always see "no no no".
WILL
On Sun, Oct 12, 2008 at 5:17 PM, Byron Foster <[EMAIL PROTECTED]> wrote:
I went back and pulled the velocity source to the revision (471881)
before
the changes to bug 285 and found that the behavior is as expected,
so I
conclude this is a bug :) which has been created here:
https://issues.apache.org/jira/browse/VELOCITY-630
On Oct 10, 2008, at 17:04 , Byron Foster wrote:
Given the following:
#macro(test $a $b)
#foreach($i in $a) $b #end
#end
#test( [1, 2, 3] "#if($i == 2) yes #else no #end")
I would expect the output:
no yes no
Instead, I get
no no no
However, if I have
#macro(test $a $b)
#set($i = 1) $b #set($i = 2) $b #set($i = 3) $b
#end
#test( [1, 2, 3] "#if($i == 2) yes #else no #end")
then I get:
no yes no
as expected.
I would say there is a bug here. The Foreach directive explicitly
sets $i
in the localscope. If I replace the explicit put to the
localscope with a
regular put, the first macro case works. I was looking at the
following
issues where the modification to Foreach was mode.
https://issues.apache.org/jira/browse/VELOCITY-285
Now, my test change to Foreach breaks issue 285, but I'm not
convinced
that the resolution to 285 is complete. Thoughts?
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]