2
person.name // => "Chad"
var attr = "name";
person.send(attr); // => Ruby style, throws error
person[attr]; // => ECMAScript style, throws error

在 Dart 中如何做到这一点?


另外,这个想法/模式叫什么?动态吸气剂?数据驱动的吸气剂?对象的可变消息/属性?

4

1 回答 1

2

在 Dart 中动态访问属性,需要通过镜像系统。

import "dart:mirrors";

...
print(person.name);  // Chad
var name = reflect(person).getField(#name).reflectee;
print(name);  // Chad
var attr = "name";
name = reflect(person).getField(new Symbol(attr)).reflectee;
print(name);  // Chad

请参阅https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-mirrors.InstanceMirror#id_getField

于 2014-05-02T22:58:26.417 回答