【发布时间】:2013-09-16 07:18:00
【问题描述】:
模式匹配时可以使用类实例的字段 (vals):
class A {
val foo = 37
def bar = 42
}
def patmat1(a: A, x: Int) {
x match {
case a.foo => println("a.foo")
case _ => println("not a.foo")
}
}
patmat1(new A, 37) // => a.foo
patmat1(new A, 42) // => not a.foo
我想知道为什么def不能类比使用?
def patmat2(a: A, x: Int) {
x match {
case a.bar => println("a.bar")
// ^ error: stable identifier required, but a.bar found.
case _ => println("not a.bar")
}
}
我认为val 和def 大多可以互换。
【问题讨论】:
-
嗯,val 是一个常量,而 def 是一个函数定义。它可以工作,但将空函数定义视为常量可能不是一个好主意......或者值得努力。
-
@marius 不,我认为这不是重复的。
-
@BoldizsárNémeth 这个问题的答案将完全相同。那么为什么这不是重复的呢?
-
进一步调查:自定义
unapply的实现也可能取决于某些全局var的状态。我认为def并不比unapply差。