在Dart中将函数/方法赋值给变量

时间:2012-04-24 20:03:09

标签: dart

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中找到它。还有其他方法可以做这样的事吗?

提前致谢。

2 个答案:

答案 0 :(得分:9)

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

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

甚至可以内联它们,如果您正在进行反复使用它们会派上用场:

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");
}

答案 1 :(得分:0)

我可能不是最好的解释者,但您可能会认为此示例在将函数分配给变量以及将闭包函数用作函数的参数方面具有更广泛的范围。

  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;
        }