여러 유형 패턴 일치를 어떻게 사용할 수 있는지 궁금합니다. 나는 가지고있다:
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()
}
그래서 다음과 같이 작성하고 싶습니다.
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
일부 튜토리얼에서 비슷한 구성을 보았지만 오류가 발생합니다.
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
그렇다면 on case 절에 몇 가지 다른 유형을 정의하는 방법이 있습니까? 나는 그것이 코드를 더 예쁘게 만들 것이라고 생각합니다. 5 개가있는 것처럼 동일한 코드를 5 번 작성합니다 (doSomething () 호출).
미리 감사드립니다!
doSomething
경우에 공통 수퍼 클래스를 가지고 있습니다case a : MyAbstract
.