Scala - '=> SomeType'是什么意思?

时间:2011-08-29 01:36:20

标签: scala

今天我想问一下=> SomeType是什么意思。我发现它在this article中使用过。它位于“顺序组合器”部分。

感谢您的回答!

3 个答案:

答案 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的值。