[英]Scala anonymous function syntax
我是斯卡拉新手。
有什么区别
invokeFunc(() => { "this is a string" } )
和
invokeFunc({ () => "this is a string" })
如果你有一个小scala细微差别的良好资源,我将不胜感激。
TL; DR :这两个代码片段是等价的。
在() => { "this is a string" }
,大括号引入了一段代码。 由于这段代码只包含一个表达式,因此它基本上没用,你可以只写() => "this is a string"
。
此外,scala几乎总是让您选择在调用方法时是使用括号还是大括号。 所以println("hello")
与println{"hello"}
。 scala允许使用大括号的原因是您可以定义可以使用的方法,就像它是语言的内置部分一样。 通过示例,您可以定义:
def fromOneToTen( f: Int => Unit ) {
for ( i <- 1 to 10 ) f(i)
}
然后做:
fromOneToTen{ i => println(i) }
这里的花括号使它看起来更像一个控制结构,如scala的内置while
。
所以invokeFunc(() => { "this is a string" } )
与invokeFunc{() => { "this is a string" } }
最后一点,括号总是可以在单个表达式的任何地方使用,因此(5)
与5
相同。 花括号总是可以用来定义一个包含一系列表达式的块,该块返回最后一个表达式。 一个特殊情况是单个表达式的块,在这种情况下,花括号与括号扮演相同的角色。 所有这些意味着您始终可以在表达式周围添加多余的括号或大括号。 所以以下都是等价的: 123
, {123}
, (123)
, ({123})
等等。
这也意味着:
invokeFunc(() => "this is a string")
是相同的
invokeFunc({ () => "this is a string" })
这是一样的
invokeFunc({( () => "this is a string" )})
等等。
据我所知,第一个有一个匿名函数,而第二个有一个块。 但是,块的最后一个元素在Scala中返回,因此该块返回相同的匿名函数,该函数随后成为方法的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.