【问题标题】:What does `def` in scala evaluate to?scala中的`def`评估为什么?
【发布时间】:2019-11-12 19:35:53
【问题描述】:

我写的是 Scala Repl

def sum(a: Int, b: Int) = a + b

这被评估为 sum: (a: Int, b: Int)Int 在 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。但我不明白def 的情况会发生什么。

【问题讨论】:

标签: scala lazy-evaluation


【解决方案1】:

REPL 显示的sum: (a: Int, b: Int)Int 是一些编译器内部泄漏到用户空间。

sum 是一个方法,因此没有 (a: Int, b: Int)Int 类型的实际 ,但编译器在内部将 sum 与称为 方法类型 的东西相关联 -它是一种包含方法签名的类型 - 它的参数名称和类型 + 结果类型。这种类型只存在于编译器中,不能直接用Scala代码编写。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2019-05-24
  • 2015-03-15
  • 2014-06-17
相关资源
最近更新 更多