如何使Dart对象/类可转换?

mar*_*itz 2 indexing object dart

在Python中,我可以通过覆盖来使任何类支持索引__getitem__:

class Test:
   def __getitem__(self, key):
      return self.data[key]
Run Code Online (Sandbox Code Playgroud)

Dart是否有类似的构造?

Lad*_*cek 8

假设该__getitem__东西允许你使用"索引"语法(object[index]),是的,Dart允许你通过定义来做同样的事情operator [].例:

class Test {
  var data = {
    "a": 1,
    "b": 2
  };

  operator [](index) => data[index];
}

main() {
  var t = new Test();
  print(t["a"]);
  print(t["b"]);
}
Run Code Online (Sandbox Code Playgroud)

您还可以定义"对面" operator []=:

class Test {
  Map data = {
    "a": 1,
    "b": 2
  };

  operator [](index) => data[index];
  operator []=(index, value) { data[index] = value; }
}

main() {
  var t = new Test();
  print(t["a"]);
  print(t["b"]);
  t["c"] = 3;
  print(t["c"]);
}
Run Code Online (Sandbox Code Playgroud)