【发布时间】:2013-12-04 10:06:11
【问题描述】:
对于嵌入式 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");
}
【问题讨论】:
-
为什么需要 Pconst 作为一个类?您可以创建一个顶级函数 Pconst(value) { return new PconstImpl(value).call(value);我必须承认我并不完全理解你想要达到的目标。你能提供更多信息吗?
-
我知道除了类之外还可以创建一个顶级函数,但我真的不想弄乱我的命名空间,我更喜欢有类和函数/具有相同名称的可调用类。
-
你为什么需要一堂课?恕我直言,只有在您调用 call(x) 的参数化实例时才有意义。您使用它的方式也可以使用函数(根本没有类)。
-
我基本上想要一个不需要 new 关键字的构造函数,所以这个类确实有意义。我可能会使用另一个调用构造函数的顶级函数。希望有一条捷径:/。无论如何,谢谢!
-
构造函数,你不需要new关键字,但是使用
new表示它是构造函数,听起来你不知道你想要一个基本函数还是构造函数,如果你想要一个创建新对象的函数,然后只创建一个独立的函数来包装构造函数。