如果有人能用简单的英语解释这种行为,我会非常感激。具体而言,case _:Foo
和case Foo()
之间是否存在差异?
myvariable match {
case _: Foo => println("its a foo!")
case Foo() => println("It's also a Foo")
case Foo => println("Oops, this will *not* match a Foo! It will never be called")
case _ => println("This will be called for all unmatched items")
}
答案 0 :(得分:4)
这是一种普通的类型匹配,有点像Java中的instanceOf。
case x: Foo => ???
它保证您可以在右侧使用x作为Foo
case Foo(a,b,c) => ???
另一方面,尝试调用unapply(在案例类中免费获得)并允许您“进入”实例并将所有字段作为可以在右侧使用的val来捕获。
附注:定义没有字段的case类与使用case对象基本相同,这是大多数人在Scala中只表示一个可能的值。所以你的第二种情况有点奇怪,而且很可能使用case对象来完成:
case object Foo
case Foo => ???