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