我知道我可以通过名称(MyClass.staticMethod
或myObj.instanceMethod
)引用静态和实例方法作为“函数”。有没有办法对构造函数做同样的事情?
例如,给定:
class MyClass {
final double val;
final String name;
MyClass.fromSomethingElse(SomethingElse se) : val = se.score, name = se.description;
}
我可以使用fromSomethingElse
构造函数作为流转换器(map()
的参数)吗?如果是这样,有没有办法以这种方式使用非命名构造函数?
我知道我总是可以定义一个函数来执行此操作:
MyClass mapper(SomethingElse se) => new MyClass.fromSomethingElse(se);
但似乎不必要地冗长。
更新
此功能已再次删除,计划稍后以新方法添加。 关注https://github.com/dart-lang/sdk/issues/10659
原版的
构造函数的Closzur化已经在前沿得到支持
void main() {
var constructor = new SomeClass#someConstructor;
var x = constructor();
print(dateConstructor(isUtc: true)(2000,1,1));
print(dateConstructor(isUtc: false)(2000,1,1));
}
Function dateConstructor({bool isUtc}) {
if(isUtc) {
return new DateTime#utc;
} else {
return new DateTime#;
}
}
class SomeClass {
SomeClass.someConstructor() {
print('constructing...');
}
}
版画
构建... 2000-01-01 00:00:00.000Z 2000-01-01 00:00:00.000
我仍然得到#
的分析仪警告。
不,你不能。但是你将来可能会这样。参见https://code.google.com/p/dart/issues/detail?id=10659,“能够使构造函数闭合”
你可以使静态方法闭合,所以如果你定义了
static fromSE(se) => new MyClass.fromSomethingElse(se);
然后你可以写
[1, 2, 3].map(MyClass.fromSE);
或者您可以按照您的描述编写方法。