Scala返回带0参数的void函数,语法难看?

时间:2011-10-28 19:16:37

标签: scala

给定定义如下的方法

 def descendEach(times:Int)(f:()=>Unit) {
      for (i <- 1 to times) {
          // other code
          f()
      }
   }

当我使用这种方法时,我希望能够写

 gd.descendEach(20){
    println(gd.cost)
 }

但是scala编译器只能让我逃脱

  gd.descendEach(20){ () => 
    println(gd.cost)
 }

这有点难看。我在这里错过了什么吗?是否有可能以我提出的第一种方式写出来?

1 个答案:

答案 0 :(得分:21)

使用以下语法:

def descendEach[T](times:Int)(f: => T)

这样你不仅可以在没有额外() =>的情况下传递函数(这被称为按名称传递),还可以使用返回任何类型的函数(不一定是Unit) 。当你想要传递一个现有的函数但是并不真正关心它的返回值时,有时很方便:

def g() = 42
descendEach(20)(g)

请注意,使用此语法时,您只使用f,而不是f()