这边文章总结一下scala对花括号和小括号的使用场景的差异。
对于小括号来说,必须的场景是,多参数函数调用的时候。举个例子:
def foo(n: Int) = n * 2
def foo1(a: Int, b: Int) = (a + b) * 2
那么以下三种方式调用foo
是等效的:
foo(1)
foo{1}
foo 1
但是,调用foo1
就必须使用()
,即
foo1(1, 2)
也就是说,单参数函数可以使用花括号代替小括号。其实,这里本质上
一个经典的例子:
package example
object MyExample {
def greet(name: => String): Unit = {
println(s"Hello $name")
}
def main(args: Array[String]): Unit = {
val foo = "Foo"
greet(foo)
greet {
println("In greet args pass")
"foo"
}
}
}
代码输出:
Hello Foo
In greet args pass
Hello foo
其实,这里本上是第二个greet
传入了一个表达式,表达式返回了一个String
类型,这相当于是表达式是一个参数,本质上是无括号调用,然后跟了一个表达式作为参数。当然,单纯的一个String
本身也是表达式。