08-scala的花括号和小括号

266 阅读1分钟

这边文章总结一下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本身也是表达式。