对于嵌入式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");
}
答案 0 :(得分:9)
class TestA {
call(int a, int b) => a + b;
}
void main()
var TA = new TestA();
int integer = TA(3, 4);
print (integer);
}
call()
方法特殊,因为任何定义call()
方法的人都被假定为动态模拟某个函数。这允许我们使用TestA
的实例,就像它们是带有两个整数参数的函数一样。
答案 1 :(得分:1)
我会尝试这样的事情:
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
}
所以你基本上只是将你的类构造函数隐藏/包装在一个沼泽标准函数后面。