【问题标题】:Subtle differences between val and parameterless defval 和无参数 def 之间的细微差别
【发布时间】:2013-06-25 00:05:54
【问题描述】:

好的,这不是关于 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,反之亦然。我想知道用一个而不是另一个可以做什么?

【问题讨论】:

    标签: scala function


    【解决方案1】:

    我不确定我能否提供一份详尽的清单,但我可以解释一下这种情况下发生了什么。

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

    稳定的标识符有一些很好的属性,可以让它们更简单地计算并具有更大的优化可能性。

    【讨论】:

    • 我敢打赌,Rex 可能是详尽无遗的,或者至少是令人筋疲力尽的,但这让我有几次进口。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 2017-04-28
    • 2011-04-26
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多