Dynamic class method invocation in Dart
像PHP中动态类方法调用的问题一样,我希望在DART中这样做。
1 2 3 | var ="name"; page.${var} = value; page.save(); |
有可能吗?
有几件事你可以实现与镜子。
下面是一个如何设置类值以及如何动态调用方法的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import 'dart:mirrors'; class Page { var name; method() { print('called!'); } } void main() { var page = new Page(); var im = reflect(page); // Set values. im.setField("name","some value").then((temp) => print(page.name)); // Call methods. im.invoke("method", []); } |
号
如果你想知道,
还有一个问题:有没有一种方法可以动态调用一个方法或在DART中的类中设置一个实例变量?
您可以使用DART镜像API来执行这类操作。镜像API现在还没有完全实现,但其工作原理如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import 'dart:mirrors'; class Page { String name; } main() { final page = new Page(); var value ="value"; InstanceMirror im = reflect(page); im.setField("name", value).then((_){ print(page.name); // display"value" }); } |
可以使用序列化
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import 'package:serializable/serializable.dart'; @serializable class Page extends _$PageSerializable { String name; } main() { final page = new Page(); var attribute ="name"; var value ="value"; page["name"] = value; page[attribute] = value; print("page.name: ${page['name']}"); } |