我正在使用ML 8.0-8
有没有办法不将Map作为参考传递给函数。
我的意思是如果我在函数中的地图中进行任何更新,它不应该反映在实际的地图中。
示例:
function call($map as map:map) {
'add one more key in the $map'
}
declare $actualMap
call($actualMap)
print $actualMap
调用函数中的更新不应反映在$ actualMap
中答案 0 :(得分:4)
你基本上必须克隆它。您可以通过XQuery中的单行程序,通过序列化和解析它来实现这一点:
let $clonedMap := map:map(document{ $map }/*)
请注意,map:map
可以保存无法序列化的项目,例如函数引用。在这种情况下,您需要重建map:map
。例如:
let $clonedMap := map:new(map:keys($map) ! map:entry(., map:get($map, .)))
第二种方法实际上可能更快,但它没有处理地图:递归地映射,而第一种方法会。您可以使用typeswitch在递归函数中包装第二个以进行补偿。
HTH!