velocity foreach循环 - 迭代数组得到更新而不用于赋值

时间:2017-05-24 08:41:00

标签: arrays foreach velocity

我在以下速度模板的foreach循环中遇到了一个非常奇怪的行为:

<html>
<body>
<table>

#set( $arrayOfArray = [[1]] )
#set( $new_arrOfArray = [] )
#set( $new_arr = [] )
                        <tr><td>Line 9</td><td>arrayOfArray: $arrayOfArray</td></tr>
#foreach ($arr in $arrayOfArray)
                        <tr><td>Line 11</td><td>arrayOfArray: $arrayOfArray</td></tr>
    #set( $new_arr = $arr )
                        <tr><td>Line 13</td><td>arrayOfArray: $arrayOfArray</td></tr>
    #if ($new_arr.add([ true ])) #end
                        <tr><td>Line 15</td><td>arrayOfArray: $arrayOfArray</td></tr>
    #if ($new_arr.add([5,6])) #end
                        <tr><td>Line 17</td><td>arrayOfArray: $arrayOfArray</td></tr>
    #if ($new_arrOfArray.add($new_arr)) #end
                        <tr><td>Line 19</td><td>arrayOfArray: $arrayOfArray</td></tr>
#end
                        <tr><td>Line 21</td><td>arrayOfArray: $arrayOfArray</td></tr>

</table>
</body>
</html>

正如您所看到的,我循环遍历一个数组数组(为了简单起见,我在这个例子中只将一个数组放入$ arrayOfArray中,但现实生活当然更复杂)。
正如您还可以从代码中看到的那样,我根本不操作变量$ arrayOfArray。但是,代码生成以下输出:

第9行arrayOfArray:[[1]]
第11行arrayOfArray:[[1]]
第13行arrayOfArray:[[1]]
第15行arrayOfArray:[[1,[true]]]
第17行arrayOfArray:[[1,[true],[5,6]]]
第19行arrayOfArray:[[1,[true],[5,6]]]
第21行arrayOfArray:[[1,[true],[5,6]]]

所以,似乎每当我向$ new_arr添加一个新的数组元素时,变量$ arrayOfArray也会被更新。
有人能够解释这种行为吗? 任何帮助高度赞赏。

安德烈亚斯

2 个答案:

答案 0 :(得分:1)

我有点不确定你需要做什么。克隆会有帮助吗?替换

#set( $new_arr = $arr )

通过

#set( $new_arr = $arr.clone() )

将保持你的$ arrayOfArray不变,而$ new_arrOfArray最后将是[[1,[true],[5,6]]]。

但也许我在这里错过了一些观点......

答案 1 :(得分:0)

#set( $new_arr = $arr ),您将$new_arr设置为{em>参考至$arr

反过来,

$arr是某个索引的{em>引用到$arrayOfArray

致电new_arr.add()后,您就可以通过引用来呼叫$arrayOfArray[$someIndex].add()