给定定义如下的方法
def descendEach(times:Int)(f:()=>Unit) {
for (i <- 1 to times) {
// other code
f()
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用这种方法时,我希望能够写出来
gd.descendEach(20){
println(gd.cost)
}
Run Code Online (Sandbox Code Playgroud)
但scala编译器只能让我逃脱
gd.descendEach(20){ () =>
println(gd.cost)
}
Run Code Online (Sandbox Code Playgroud)
这有点难看.我在这里错过了什么吗?是否有可能以我提出的第一种方式写出来?
Tom*_*icz 21
使用以下语法:
def descendEach[T](times:Int)(f: => T)
Run Code Online (Sandbox Code Playgroud)
这样你不仅可以在没有额外的情况下传递函数() =>(这称为按名称传递),还可以使用返回任何类型的函数(不一定Unit).当你想要传递一个现有的函数但是并不真正关心它的返回值时,它有时很方便:
def g() = 42
descendEach(20)(g)
Run Code Online (Sandbox Code Playgroud)
请注意,使用此语法您只是使用f,而不是f().
| 归档时间: |
|
| 查看次数: |
2960 次 |
| 最近记录: |