我希望能够做这样的事了飞镖类的构造函数:
class Model {
// ... setting instance variables
Model(Map fields) {
fields.forEach((k,v) => this[k] = v);
}
}
显然,这是不行的,因为this
没有一个[]=
方法。
有没有一种方法,使其工作或者是它根本就不是做事情的“镖路”? 如果不是的话,你能告诉我什么是解决这个正确的方式?
我希望能够做这样的事了飞镖类的构造函数:
class Model {
// ... setting instance variables
Model(Map fields) {
fields.forEach((k,v) => this[k] = v);
}
}
显然,这是不行的,因为this
没有一个[]=
方法。
有没有一种方法,使其工作或者是它根本就不是做事情的“镖路”? 如果不是的话,你能告诉我什么是解决这个正确的方式?
目前还没有。 你将不得不等待反射到达特这样的事情(希望)前到达成为可能。 在那之前你最好的选择可能是做一个构造函数。 或者你可以尝试使用类似的JSONObject ,它允许你直接从地图初始化(关于如何工作的解释,检查这个博客文章)。
您可以使用镜子 :
InstanceMirror im = reflect(theClassInstance);
im.invoke('methodName', ['param 1', 2, 'foo']).then((InstanceMirror value) {
print(value.reflectee); // This is the return value of the method invocation.
});
所以,你的情况,你可以这样做(因为你必须制定者):
import 'dart:mirrors';
class Model {
Model(Map fields) {
InstanceMirror im = reflect(this);
fields.forEach((k, v) => im.setField(k, v)); // or just fields.forEach(im.setField);
}
}
对于文档InstanceMirror
可能会派上用场。