[英]What does `def` in scala evaluate to?
我写的是 Scala Repl
def sum(a: Int, b: Int) = a + b
这被评估为sum: (a: Int, b: Int)Int
in Repl。 Scala 中的def
被懒惰地评估。 那么,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
function。 但我不明白在def
的情况下会发生什么。
REPL 显示的sum: (a: Int, b: Int)Int
是一些编译器内部泄漏到用户空间。
sum
是一种方法,因此没有类型(a: Int, b: Int)Int
实际值,但是编译器在内部将sum
与称为方法类型的东西相关联 - 它是一种保存方法签名的类型 - 它的参数名称和类型 +结果类型。 这种类型只存在于编译器中,不能直接写在Scala代码中。
def 不是变量,它成为方法,因此没有类型。 为了能够查看其签名,您必须将其转换为部分 function 或类似的东西。 然而,val 变成了 Function2 object。 如果需要,请查看一些反编译的代码。 这篇文章很有帮助https://alvinalexander.com/scala/fp-book-diffs-val-def-scala-functions 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.