scala - val 和无参数 def 之间的细微差别

标签 scala function

好吧,这不是关于 vals 和 defs 或函数和方法之间的根本差异的另一个问题。我看到编译时:

val Extractor = new AnyRef { def unapply(s :String) => Some(s) }
val x = "hello" match { case Extractor(s) => s }

val Extractor 更改为 def Extractor 会破坏代码。为什么会这样呢?这有点令人失望,因为我希望完全透明,这样我就可以将实现从 vals(无论如何生成方法)更改为 defs,反之亦然。我想知道还有什么可以用其中一个而不是另一个做的?

最佳答案

我不确定我能否提供详尽的列表,但我可以解释这种情况下发生的情况。

Extractor 必须是一个稳定的标识符。请参阅 Scala Language Specification 的第 8.1.8 节。 (def 不稳定;val 稳定。)

稳定标识符具有某些良好的属性,使它们能够更简单地计算并具有更大的优化可能性。

关于scala - val 和无参数 def 之间的细微差别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287128/

相关文章:

Jquery无法在回调函数中访问$(this)

Python:将属性及其函数(fget、fset、fdel)从一个类复制到另一个类

java - Scala XML 性能与 Java XML

scala - 应用程序的多角色系统

scala - 推荐的 Scala io 库

swift - 如何在swift中从另一个函数访问函数参数

scala - 为什么scala不能推断方法参数的类型

scala - Spark Filter/Predicate Pushdown 是否在 ORC 文件中没有按预期工作?

python - 如何查看 python 方法的参数(和类型)?

c - 原始 C 中不完整的 beta 函数