使用构造函数作为函数

问题描述 投票:1回答:2

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

但似乎不必要地冗长。

dart
2个回答
1
投票

更新

此功能已再次删除,计划稍后以新方法添加。 关注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

我仍然得到#的分析仪警告。


3
投票

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

你可以使静态方法闭合,所以如果你定义了

static fromSE(se) => new MyClass.fromSomethingElse(se);

然后你可以写

[1, 2, 3].map(MyClass.fromSE);

或者您可以按照您的描述编写方法。

© www.soinside.com 2019 - 2024. All rights reserved.