使用构造函数作为函数

时间:2013-12-10 17:34:40

标签: dart

我知道我可以通过名称(MyClass.staticMethodmyObj.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);

但似乎不必要地冗长。

2 个答案:

答案 0 :(得分:3)

不,你不能。但是你将来可能会这样。请参阅https://code.google.com/p/dart/issues/detail?id=10659,“能够使构造函数闭合”

您可以将静态方法封闭,因此如果您定义了

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

我仍然可以获得#的分析器警告。

相关问题