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