scala 中的 `def` 的计算结果是什么?
What does `def` in scala evaluate to?
我写的是Scala Repl
def sum(a: Int, b: Int) = a + b
这被评价为
sum: (a: Int, b: Int)Int
在回复中。 def
在 Scala 中是延迟求值的。那么,Repl 显示的类型是什么?另外,当调用 sum(1,2)
时如何急切地评估它,或者 (a: Int, b: Int)Int
如何评估为 Int
?
我在 Scala 中使用 val
时注意到了这一点。如果我写 val sum = (a: Int, b: Int) = a + b
,这会被急切地评估为 (Int, Int) => Int = <function2>
这很好,因为 apply
函数调用已经完成。但我不明白在 def
.
的情况下会发生什么
REPL 显示的 sum: (a: Int, b: Int)Int
是一些编译器内部泄漏到用户空间。
sum
是一种方法,因此没有 (a: Int, b: Int)Int
类型的实际 值 ,但编译器在内部将 sum
与某些内容相关联称为 方法类型 - 它是一种包含方法签名的类型 - 它的参数名称和类型 + 结果类型。这种类型只存在于编译器中,不能直接写在Scala代码中。
我写的是Scala Repl
def sum(a: Int, b: Int) = a + b
这被评价为
sum: (a: Int, b: Int)Int
在回复中。 def
在 Scala 中是延迟求值的。那么,Repl 显示的类型是什么?另外,当调用 sum(1,2)
时如何急切地评估它,或者 (a: Int, b: Int)Int
如何评估为 Int
?
我在 Scala 中使用 val
时注意到了这一点。如果我写 val sum = (a: Int, b: Int) = a + b
,这会被急切地评估为 (Int, Int) => Int = <function2>
这很好,因为 apply
函数调用已经完成。但我不明白在 def
.
REPL 显示的 sum: (a: Int, b: Int)Int
是一些编译器内部泄漏到用户空间。
sum
是一种方法,因此没有 (a: Int, b: Int)Int
类型的实际 值 ,但编译器在内部将 sum
与某些内容相关联称为 方法类型 - 它是一种包含方法签名的类型 - 它的参数名称和类型 + 结果类型。这种类型只存在于编译器中,不能直接写在Scala代码中。