首页 文章

使用构造函数作为函数

提问于
浏览
1

我知道我可以通过名称( MyClass.staticMethodmyObj.instanceMethod )引用它们来使用静态和实例方法"functions" . 有没有办法对构造函数做同样的事情?

例如,给定:

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 回答

  • 1

    update

    此功能已再次删除,计划稍后以新方法添加 .
    关注https://github.com/dart-lang/sdk/issues/10659

    original

    构造函数的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,"Be able to closurize constructors"

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

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

    然后你可以写

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

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

相关问题