Owe*_*wen 11
它表示您可以运行的代码块.
例如:
scala> def doTwice(op: =>Unit) = {op; op}
doTwice: (op: => Unit)Unit
scala> doTwice({println("Hi")})
Hi
Hi
Run Code Online (Sandbox Code Playgroud)
在这种情况下=>Unit是{println("Hi")}
这里"SomeType"是Unit,因为println它不产生值.如果它产生了Int,那就是=>Int.
它表明了两件事.首先,由于前缀=>,它表示参数将按名称传递.然后,它表示传递的参数的类型必须是SomeType.
有些人把这两者混为一谈,思考=> SomeType是一种类型本身 - 事实并非如此.它是两件事的结合:参数评估策略和参数类型.
因此,如果你有这个问题,如果维基百科链接没有明确说明,请按名称简短解释
def f[A](x: => A) = { x; x }
f(some stuff)
Run Code Online (Sandbox Code Playgroud)
然后Scala会像这样执行:
{ some stuff; some stuff }
Run Code Online (Sandbox Code Playgroud)
在按值调用时,会发生什么更像是这样:
val x = some stuff
{ x; x }
Run Code Online (Sandbox Code Playgroud)
另请注意,参数始终按值调用,但仅一次.在按名称调用时,可能永远不会计算参数(例如,如果它在一个非执行的分支上if),但可能会多次评估.
| 归档时间: |
|
| 查看次数: |
2457 次 |
| 最近记录: |