[ 
https://issues.apache.org/jira/browse/VELOCITY-684?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12666569#action_12666569
 ] 

Nathan Bubna commented on VELOCITY-684:
---------------------------------------

Ugh.  Again, even if this is correct pass by name behavior, Velocity was 
designed to be pass by name in order to behave like this.   I would prefer to 
say that our design goal for macro arguments is not "correct pass by name 
behavior" but rather something like "a modified, unsurprising form of pass by 
name behavior".   So, when a map literal (or other literal) is passed in, we 
should probably just assign it to that reference in the local context so that 
it can be modified as one would expect.  So, technical correctness be damned, i 
want Velocity to be easy to read and write.  Surprises like this are bugs, 
IMHO. :)

> Passing a map literal to a macro call forbids altering the map in any way, 
> while maps bound to an actual parameter may be changed
> ---------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: VELOCITY-684
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-684
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>    Affects Versions: 1.6.1
>            Reporter: Sergiu Dumitriu
>
> For example, with the following macro:
> #macro(changeMap $map)
>   Before: $map.someKey
>   #set($map.someKey = 'new value')
>   After: $map.someKey
> #end
> This call works as expected:
> #set($actualMap = {'someKey' : 'old value'})
> #changeMap($actualMap) => old value, then new value
> But this one doesn't:
> #changeMap({'someKey' : 'old value'}) => old value, then again old value

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to