Arrays velocity foreach循环-迭代数组在不用于赋值的情况下得到更新

Arrays velocity foreach循环-迭代数组在不用于赋值的情况下得到更新,arrays,foreach,velocity,Arrays,Foreach,Velocity,我在以下velocity模板的foreach循环中遇到了一个非常奇怪的行为: <html> <body> <table> #set( $arrayOfArray = [[1]] ) #set( $new_arrOfArray = [] ) #set( $new_arr = [] ) <tr><td>Line 9</td><td>arrayOfArray: $arr

我在以下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=[[1]])
#设置($new\u arrOfArray=[]))
#设置($new_arr=[]))
第9行arrayOfArray:$arrayOfArray
#foreach($arrayOfArray中的arr)
第11行arrayOfArray:$arrayOfArray
#设置($new_arr=$arr)
第13行arrayOfArray:$arrayOfArray
#如果($new_arr.add([true])#结束
第15行arrayOfArray:$arrayOfArray
#如果($new_arr.add([5,6])结束
第17行arrayOfArray:$arrayOfArray
#如果($new_arrOfArray.add($new_arr))#结束
第19行arrayOfArray:$arrayOfArray
#结束
第21行arrayOfArray:$arrayOfArray
正如您所看到的,我正在遍历数组的数组(为了简单起见,在本例中,我只是将单个数组放入$arrayOfArray中,但实际情况当然更复杂)。
正如您从代码中也可以看到的,我根本没有操作变量$arrayOfArray。但是,该代码生成以下输出:

第9行阵列法拉利:[[1]]
第11行阵列法拉利:[[1]]
第13行阵列法拉利:[[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变量也会被更新。
有人能解释这种行为吗??
非常感谢您的帮助

Andreas

\set($new\u arr=$arr)
设置
$new\u arr
作为对
$arr
的引用

$arr
又是在特定索引处对
$arrayOfArray
的引用


当调用
new\u arr.add()
时,您就是通过引用调用
$arrayOfArray[$someIndex].add()

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

#set( $new_arr = $arr )

将使您的$arrayOfArray保持不变,而$new_arrOfArray将在结尾处[[1],[5,6]]


但也许我在这里遗漏了一些要点…

我恢复了在我的帖子上所做的编辑。我有意将打印输出“行…”移到右侧,因为这些行仅用于调试目的。将它们更多地向右移动可以提高“真实代码”的可读性。。。这也是我的恐惧。“但是有没有办法阻止这种行为?”安德烈亚斯说实话我不知道,因为我对速度非常不熟悉。有一些讨论,虽然它看起来对你的案例没有特别的帮助。我已经测试过了。不幸的是,这根本没有帮助…:-(我想解决这个问题的唯一方法是不使用数组数组。相反,我会尝试将要处理的数组放入带有某种分隔符的字符串中。不太好……这很奇怪。我实际上测试了克隆,它对我有效,因为arrayOfArray保持不变。
#set( $new_arr = $arr.clone() )