单位作为参数

che*_*hen 1 scala

以下方法的区别是什么?

def sum1() = 1+2

def sum2(a:Unit) = 1+2
Run Code Online (Sandbox Code Playgroud)

我认为它们在语义上是相同的,是不是?

Dyl*_*lan 6

使用sum1,您可以使用或不使用括号来调用它:

val x = sum1    // x: Int = 3
val y = sum1()  // y: Int = 3
Run Code Online (Sandbox Code Playgroud)

但sum2你不得不提供括号.我认为,如果你打电话sum2(),你实际上是调用sum2与()作为参数a.

val x2 = sum2   // error
val y2 = sum2() // y2: Int = 3
Run Code Online (Sandbox Code Playgroud)

  • 一个好的经验法则是当计算涉及副作用时需要parens,但是当计算是纯粹时不要求它们.我想你可以用这种方式使用parens,就像Lisp和Ruby使用`!`一样. (2认同)