繁体   English   中英

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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM