代码之家  ›  专栏  ›  技术社区  ›  erluxman

如何在DART中返回函数?

  •  5
  • erluxman  · 技术社区  · 7 年前

    AS DART文档 describe 就这样 纯OOP语言 , Functions 也是 object .

    在JS中可以这样做:

    function functionReturningFunctionJS() {
      return function functionReturnedByFunctionJS() {
          return "This is function returned by function";
      }
    }
    

    但我不能从这样的函数返回函数n dart:

    Function functionReturningFunctionDart() {
      return  functionReturnedByFunctionDart(){
        return "This is function Returned By function";
      }
    } 
    

    正确的方法是什么?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Dinesh Balasubramanian    7 年前

    请参阅下面的add函数,它返回另一个函数(或闭包)。

    void main() {
      Function addTen = add(10);
      print(addTen(5)); //15
      print(add(10)(5)); //15
    }
    
    Function add(int a) {
        int innerFunction(b) {
            return a + b;
        }
        return innerFunction;
    }
    

    使用匿名函数:

    void main() {
      Function addTen = add(10)
      print(addTen(5)); //15
      print(add(10)(5)); //15
    }
    
    Function add(int a) {
        return (b) => a + b;
    }
    
        2
  •  4
  •   erluxman    7 年前

    可以返回函数文本或包含变量的函数,但不能返回函数声明。要返回函数声明,可以将其赋给局部变量(去掉它),然后返回它。

    // OK
    String Function() makeFunction() {
      return () {
        return 'Hello';
      };
    }
    
    // Also OK
    String Function() makeFunction2() {
      String myInnerFunction() {
        return 'Hello';
      }
      final myFunction = myInnerFunction; // make a tear-off.
      return myFunction;
    }
    

    您可以调用如下函数:

    var abc = makeFunction2();
    print(abc());