16

Dart 是否支持变量函数/方法的概念?因此,通过存储在变量中的名称来调用方法。

例如在 PHP 中,这不仅可以用于方法:

// With functions...
function foo()
{
    echo 'Running foo...';
}

$function = 'foo';
$function();

// With classes...
public static function factory($view)
{
    $class = 'View_' . ucfirst($view);
    return new $class();
}

我没有在语言导览或 API 中找到它。其他方法可以做这样的事情吗?

提前致谢。

4

2 回答 2

18

要将函数的名称存储在变量中并稍后调用它,您必须等到反射到达 Dart(或使用noSuchMethod获得创意)。但是,您可以将函数直接存储在 JavaScript 等变量中

main() {
  var f = (String s) => print(s);
  f("hello world");
}

甚至内联它们,如果你正在做recusion,它会派上用场:

main() {
   g(int i) {
      if(i > 0) {
         print("$i is larger than zero");
         g(i-1);
      } else {
         print("zero or negative");
      } 
   }
   g(10);
}

然后可以将存储的函数传递给其他函数

main() {
   var function;
   function = (String s) => print(s);
   doWork(function);
}

doWork(f(String s)) {
   f("hello world");
}
于 2012-04-24T20:36:54.237 回答
1

我可能不是最好的解释者,但您可能会认为这个示例具有更广泛的将函数分配给变量的范围,并且还使用闭包函数作为函数的参数。

  void main() {
      // a closure function assigned to a variable.
      var fun = (int) => (int * 2); 
      // a variable which is assigned with the function which is written below
      var newFuncResult = newFunc(9, fun); 
      print(x); // Output: 27
    }

    //Below is a function with two parameter (1st one as int) (2nd as a closure function)
        int newFunc(int a, fun) {
          int x = a;
          int y = fun(x);
          return x + y;
        }
于 2018-11-23T09:38:50.813 回答