就像在 PHP 中动态类方法调用中的问题一样,我想在 Dart 中执行此操作。
var = "name";
page.${var} = value;
page.save();
那可能吗?
使用Mirrors可以实现几件事。
这是一个如何设置类的值以及如何动态调用方法的示例:
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", []);
}
如果您想知道,im
是一个InstanceMirror
,它基本上反映了page
实例。
你可以使用Dart Mirror API来做这样的事情。Mirror API 现在还没有完全实现,但它是如何工作的:
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"
});
}
您可以使用可序列化
例如:
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']}");
}