如果我们将以下代码段作为示例:
main() {
List<int> array = [1, 2, 3, 4];
List<int> newArray = change(array);
print(array); // [99, 2, 3, 4]
print(newArray); // [99, 2, 3, 4]
print(newArray == array); // true
}
change(List<int> array) {
var newArray = array;
newArray[0] = 99;
return newArray;
}
Run Code Online (Sandbox Code Playgroud)
原始数组变异了.我期待通过将数组(对象)传递给更改函数并为其分配一个新变量,我可以避免变异.我知道built_collection库似乎是不可变集合的主要选择.是否存在任何原生方式的核心库,允许深度冻结或防止副作用(在另一个函数内的操作)?
到目前为止我所知道的用途是向量:
(get [1 2 3 4] 2) ; => 3
Run Code Online (Sandbox Code Playgroud)
并在地图上:
(get {:a "a" :b "B" :c "c"} :c) ; => "c"
Run Code Online (Sandbox Code Playgroud)
从文档中可以看出:
clojure.core/get([map key] [map key not-found])
如果key不存在,则返回映射到key,not-found或nil的值.