假设 c
可以是 Updatable
或 Drawable
或两者。如果两者都有,我想先处理 Updatable
。
鉴于此代码:
case c: Updatable => c.update()
case c: Drawable => c.draw()
有一个问题:它只评估其中一个选择。有时,
c
可以同时运行,所以我需要同时运行这两个。我知道有
|
机制看起来像这样:case c @ (_: Updatable | _: Drawable) => c.update(); c.draw()
这里的问题是我不能同时调用
update
和 draw
因为它是一个 |
。我想我正在寻找这样的东西,但没有编译:
case c @ (_: Updatable & _: Drawable) => c.update(); c.draw()
case c: Updatable => c.update()
case c: Drawable => c.draw()
有这样的事情吗?我知道我可以打开它并编写
isInstacenOf
,但如果可能的话,我更喜欢模式匹配。
最佳答案
def f(c:Any) = c match {
case d:Drawable with Updatable => println("both")
case d:Drawable => println("drawable")
case u:Updatable => println("updatable")
}
关于Scala 模式匹配多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23013414/