可以匹配特征层次结构而不是类的工作吗? 性状可以匹配吗?
我是不是在编写提取器时不够,或者没有办法按特征而不是类来匹配,如下面的简化示例所示:
8-bit bytestring
让我想起一些结构性的打字。
答案 0 :(得分:3)
刚
object Compile {
def foo(s: Abstract) = s match {
case _ : A =>
case _ : B =>
}
}
所以它可以按类型匹配,包括类和特征:
object Compile {
def foo(s: Abstract) = s match {
case _ : A =>
case _ : B =>
case _ : C1 =>
}
}
_
这里只是一个占位符,您可以使用任何名称捕获对象本身。
请注意,它不能正确地用于结构类型,因为它总能成功匹配它们:
scala> object Compile {
| def foo(s: Abstract) = s match {
| case _ : A =>
| case _ : B =>
| case _ : C =>
| case _ : {def a: Int} => println("Z")
| }
| }
<console>:16: warning: a pattern match on a refinement type is unchecked
case _ : {def a: Int} => println("Z")
^
scala> Compile.foo(new Abstract{})
Z