今天我想问一下=> SomeType
是什么意思。我发现它在this article中使用过。它位于“顺序组合器”部分。
感谢您的回答!
答案 0 :(得分:11)
这意味着您可以运行一段代码。
例如:
scala> def doTwice(op: =>Unit) = {op; op}
doTwice: (op: => Unit)Unit
scala> doTwice({println("Hi")})
Hi
Hi
在这种情况下,=>Unit
为{println("Hi")}
这里“SomeType”是Unit,因为println
不会产生值。如果它生成Int
,则为=>Int
。
答案 1 :(得分:6)
它表明两件事。首先,由于前缀=>
,它表示参数将被传递by name。然后,它表示传递的参数类型必须为SomeType
。
有些人把这两者混为一谈,认为=> SomeType
本身就是一种类型 - 事实并非如此。它是两件事的结合:参数评估策略和参数类型。
所以,如果你有这个,那么,如果维基百科链接没有明确说明,请按名称进行简短解释:
def f[A](x: => A) = { x; x }
f(some stuff)
然后Scala会像这样执行:
{ some stuff; some stuff }
在按值调用时,会发生什么更像是这样:
val x = some stuff
{ x; x }
另请注意,参数值始终按值调用,但仅限一次。按名称调用时,参数可能从不进行评估(例如,如果它在if
的非执行分支上),但可以多次评估。
答案 2 :(得分:2)
它只是一种不带参数的函数值。 Owen 的例子很酷,只知道“A => B”是一个函数,其参数的类型为A,返回值的类型为B,“=> B”是一个不带参数的函数,返回类型为B的值。