Scala 模式匹配多种类型

标签 scala

假设 c 可以是 UpdatableDrawable 或两者。如果两者都有,我想先处理 Updatable

鉴于此代码:

case c: Updatable => c.update()
case c: Drawable => c.draw()

有一个问题:它只评估其中一个选择。有时,c 可以同时运行,所以我需要同时运行这两个。

我知道有 | 机制看起来像这样:

case c @ (_: Updatable | _: Drawable) => c.update(); c.draw()

这里的问题是我不能同时调用 updatedraw 因为它是一个 |

我想我正在寻找这样的东西,但没有编译:

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/

相关文章:

scala - Play 2.3.0 和 Scala 2.10.4

scala - Mockito 匹配器、scala 值类和 NullPointerException

scala - 2个给定日期之间的随机日期

forms - 重复值的唯一约束

json - 如何将 DataFrame 转换为 Json?

java - Eclipse 说 Java 类无法解析导入的 scala 类型

scala - 单 token 前瞻的性能损失是多少?

scala - 如何最好地处理Future.filter谓词不满足类型错误

scala - 后代类中的宏扩展

java - IntelliJ IDEA 13 给出关于不兼容类型的无效错误(Play 中的 Java-Scala-InterOp)