1

次の方法の違いは何ですか?

def sum1() = 1+2

def sum2(a:Unit) = 1+2

意味的には同じだと思いますが、そうですか?

4

3 に答える 3

6

を使用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
于 2012-05-26T18:37:24.910 に答える
2

unit を引数として式に渡すと、厳密な言語で遅延評価をシミュレートできることに注意してください。()「評価をラムダの下に移動する」ことにより、が渡されるまで式が評価されないようにすることができます。再検査。

于 2012-05-26T20:46:03.587 に答える
2

これらの方法は同じではありません。パラメータを受信すると、もう一方は受信しません。ここを参照してください:

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
于 2012-05-27T06:54:07.813 に答える