对于嵌入式DSL,我希望类表现得像一个函数。对于实例(https://www.dartlang.org/articles/emulating-functions/)来说似乎很容易,但是我无法在类中实现它。我尝试创建一个静态调用方法,但这也不起作用。

有没有办法或者我必须给该类起另一个名字并使Pconst成为函数,并调用构造函数?

class Pconst {
  final value;
  Pconst(this.value);
  static Pconst call(value) => new Pconst(value);

  String toString() => "Pconst($value)";
}

void main() {
  var test = Pconst(10);
  // Breaking on exception: Class '_Type' has no instance method 'call'.

  print("Hello, $test");
}

最佳答案

我会尝试这样的事情:

class _PConst{
    final value;
    _Pconst(this.value);

    String toString() => "Pconst($value)";
}

PConst(value){
    return new _PConst(value);
}

void main() {
    var test = Pconst(10);

    print("Hello, $test"); //should work ok
}

因此,您基本上只是将类构造函数隐藏/包装在沼泽标准函数的后面。

09-27 16:19