如何在Dart中扩展函数?
我知道,但我如何将其用于函数 基本上,我面临两个问题:如何在Dart中扩展函数?,dart,Dart,我知道,但我如何将其用于函数 基本上,我面临两个问题: 我应该在上扩展什么(扩展FancyFunction on?)? 我想添加一个函数,如toAsync,使函数返回其通常结果的Future 我将如何实现呼叫? 我可以创建执行this()或this.call()的callAsync成员,但我希望使用常规调用语法,即仅使用括号 扩展函数时,我应该扩展什么? 达特有一个好主意。可以对其进行扩展,如果需要,可以传递类型参数。 以下是一份: R函数(S,T){…}上的扩展CurryFunction 此
扩展FancyFunction on?
)?我想添加一个函数,如
toAsync
,使函数返回其通常结果的Future
我可以创建执行
this()
或this.call()
的callAsync
成员,但我希望使用常规调用语法,即仅使用括号以下是一份: R函数(S,T){…}上的扩展CurryFunction 此外,您可以扩展任何函数 要添加
toAsync
和callAsync
功能,可以使用通用返回类型R
。请注意,这将只扩展没有参数的函数,因为Function()
不接受任何参数:
R函数()上的扩展FancyFunction{
Future函数()toAsync()=>()async=>this();
}
现在,可以这样使用:
void syncHello()=>print('Hello');
void main(){
final asynchhello=syncHello.toAsync();
asyncHello()。然后()=>print('World!');
}
如何实现呼叫?
Dart的每一个班级都可以。您可以只使用括号执行此方法,也可以使用.call()
下面是一个示例实现: R函数()上的扩展FancyFunction{ Future call()异步=>this(); } 由于每个
函数
都已经实现了调用
,因此不能隐式调用扩展成员。
相反,您必须显式地将函数声明为FancyFunction
,才能调用它:
void syncHello()=>print('Hello');
void main(){
FancyFunction(syncHello)()
.然后((u)=>打印('World!');
}
请注意,FancyFunction(syncHello)(
与FancyFunction(syncHello).call()是相同的方法调用
然而,现在我们有两个问题:
- 我们必须显式地将函数声明为
FancyFunction
,这在某种程度上违背了扩展的目的
call
方法将始终返回Future
,因为当我们声明FancyFunction
时,无法再访问常规调用方法
相反,添加类似于callAsync
的方法似乎是更好的解决方案:
R函数()上的扩展FancyFunction{
Future callAsync()async=>this();
}
现在,callAsync
可以再次隐式使用:
void syncHello()=>print('Hello');
void main(){
syncHello.callAsync()
.然后((u)=>打印('World!');
syncHello();//常规调用
}