相关疑难解决方法(0)

Scala多种类型模式匹配

我想知道如何使用多种类型模式匹配.我有:

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)

types scala pattern-matching

66
推荐指数
1
解决办法
5万
查看次数

如何在scala中使用没有案例类的模式匹配?

我听说我们可以在 Scala 中应用模式匹配而不使用案例类。另外,我的意思不仅仅是识别实际的实现类,还包括从对象中提取各种值。真的可能吗?我们怎样才能做到这一点?

在之前发布的类似主题的任何问题中,我找不到指向我的解决方案的可接受答案。因此,我决定提出一个新问题。

scala syntactic-sugar pattern-matching apply case-class

3
推荐指数
1
解决办法
1019
查看次数

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)

monads scala

0
推荐指数
2
解决办法
217
查看次数