想象一下这样一个愚蠢的类:
class ConditionalWorker{
var validityChecker= (inputs)=>true;
ConditionalWorker(this.validityChecker)
...
现在我的问题是,声明validityChecker字段的正确方法是什么?
This tutorial建议使用typedefs
。但那不太实际。首先,编写许多只能使用一次的typedef是一件苦差事。其次,这些typedef会显示并污染我的IDE的自动完成。
var
效果最好,使用自定义setter /构造函数参数来保持它总是特定类型,但我知道样式指南是discouraged。
我可以做Function<bool>
,但这只是一个更美化的变量和工作量是相同的。
这是一种耻辱,因为拥有这样的功能是完全合法的:
bool every(bool test(E element));
其中参数是一个非常明确定义的函数,但我不能以相同的方式声明字段:
bool test(E element);
但希望有一些东西同样好,我没想到。右?d
答案 0 :(得分:2)
如果Function<bool>
不够具体(您还需要指定参数的数量和类型,则必须使用typedef。没有其他方法。
我不确定为什么你觉得它不实用。如果要为引用值的字段指定类型,则必须使用其中一个现有类或创建新类。引用功能的字段也是如此。
答案 1 :(得分:1)
如果您希望函数类型比Function
更具体,则需要typedef
。
如果您不希望为每种返回类型命名typedef,则可以自己定义泛型函数类型。
typedef R function0<R>();
typedef R function1<S,R>(S arg1);
typedef R function2<S,T,R>(S arg1. T arg2);
typedef R function3<S,T,U,R>(S arg1, T arg2, U arg3);
然后你可以写:
function1<int,int> curryAdd(int x) => (int y) => x + y;
如果function0
对您不利,您可以为其命名NullaryFunction
,UnaryFuncytion
,BinaryFunction
,TernaryFunction
或您喜欢的任何其他名称