次の方法の違いは何ですか?
def sum1() = 1+2
def sum2(a:Unit) = 1+2
意味的には同じだと思いますが、そうですか?
を使用sum1
すると、括弧の有無にかかわらず呼び出すことができます。
val x = sum1 // x: Int = 3
val y = sum1() // y: Int = 3
しかし、sum2
あなたと一緒に括弧を提供することを余儀なくされています..あなたが呼び出す場合sum2()
、あなたは実際に引数としてで呼び出しsum2
ていると思います。()
a
val x2 = sum2 // error
val y2 = sum2() // y2: Int = 3
unit を引数として式に渡すと、厳密な言語で遅延評価をシミュレートできることに注意してください。()
「評価をラムダの下に移動する」ことにより、が渡されるまで式が評価されないようにすることができます。再検査。
これらの方法は同じではありません。パラメータを受信すると、もう一方は受信しません。ここを参照してください:
scala> sum1(println("Hi, there!"))
<console>:9: error: too many arguments for method sum1: ()Int
sum1(println("Hi, there!"))
^
scala> sum2(println("Hi, there!"))
Hi, there!
res1: Int = 3