我知道我可以通过名称(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);
但似乎不必要地冗长。
答案 0 :(得分:3)
您可以将静态方法封闭,因此如果您定义了
static fromSE(se) => new MyClass.fromSomethingElse(se);
然后你可以写
[1, 2, 3].map(MyClass.fromSE);
或者你可以像你描述的那样写一个方法。
答案 1 :(得分:1)
<强>更新强>
此功能已被删除,并计划稍后以新方法添加 关注https://github.com/dart-lang/sdk/issues/10659
<强>原始强>
构造函数的Closzurization已在最前沿支持
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
我仍然可以获得#
的分析器警告。