如何在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();//常规调用
    }