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代码中。