我想知道如何使用多种类型模式匹配.我有:
abstract class MyAbstract
case class MyFirst extends MyAbstract
case class MySecond extends MyAbstract
case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething()
val x: MyAbstract = MyFirst
x match {
case a: MyFirst => doSomething()
case b: MySecond => doSomething()
case _ => doSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)
所以我想写一些类似的东西:
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)
我在一些教程中看到了类似的构造,但它给了我错误:
pattern type is incompatible with expected type;
[error] found : object MyFirst …Run Code Online (Sandbox Code Playgroud) 我听说我们可以在 Scala 中应用模式匹配而不使用案例类。另外,我的意思不仅仅是识别实际的实现类,还包括从对象中提取各种值。真的可能吗?我们怎样才能做到这一点?
在之前发布的类似主题的任何问题中,我找不到指向我的解决方案的可接受答案。因此,我决定提出一个新问题。
我想检查一个对象是否是一个选项.
例如:
val foo: Option[String] = Some("foo")
val bar: String = "bar"
Run Code Online (Sandbox Code Playgroud)
我想要一个功能isOption:
def isOption(value: Any): Boolean = {
???
}
Run Code Online (Sandbox Code Playgroud)
结果将是:
isOption(foo) // true
isOption(bar) // false
Run Code Online (Sandbox Code Playgroud)