给定定义如下的方法
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)
}
这有点难看。我在这里错过了什么吗?是否有可能以我提出的第一种方式写出来?
答案 0 :(得分:21)
使用以下语法:
def descendEach[T](times:Int)(f: => T)
这样你不仅可以在没有额外() =>
的情况下传递函数(这被称为按名称传递),还可以使用返回任何类型的函数(不一定是Unit
) 。当你想要传递一个现有的函数但是并不真正关心它的返回值时,有时很方便:
def g() = 42
descendEach(20)(g)
请注意,使用此语法时,您只使用f
,而不是f()
。