代码之家  ›  专栏  ›  技术社区  ›  Mohamed Hayibor

有什么方法可以避免Dart lang中的对象突变?

  •  7
  • Mohamed Hayibor  · 技术社区  · 9 年前

    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;
    }
    

    原始数组会发生变异。我希望通过将数组(对象)传递给change函数并为其分配一个新变量,可以避免突变。我知道 built_collection library

    2 回复  |  直到 9 年前
        1
  •  6
  •   Günter Zöchbauer    9 年前

    UnmodifiableListView 从…起 dart:collection 并将其传递,而不是阵列本身。我认为这是最基本的方式。

        2
  •  4
  •   Richard Ambler    8 年前

    对象是通过引用传递的。这是设计的:对象通常是大型数据结构,每次将对象传递给函数时,在内部创建一个副本可能非常低效。(这与其他主要面向对象语言使用的方法相同。)

    因此 array newArray 有两个名字 相同的 根本的 List 在您的代码中。

    如果要显式创建新列表,只需更改

    var newArray = array;
    

    致:

    var newArray = new List.from(array);