[SCALA] 다중 스칼라 형 패턴 매칭
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()
}
내가 좋아하는 뭔가를 쓰고 싶습니다 그래서 :
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
나는 몇 가지 튜토리얼 유사한 구조를보고 있지만, 그것은 나에게 오류를 제공합니다 :
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
그래서 경우 절에서의 몇 가지 유형을 정의하는 방법은 무엇입니까? 나는 코드를 예쁘게 만들 것 같아요. 내가 그들을 5있을 것이다 것처럼, 나는 동일한 코드를 5 번 쓸 것 (해봐요 호출을 ()).
사전에 감사합니다!
해결법
-
==============================
1.당신은 당신의 경우 클래스의 괄호가 누락되었습니다. 매개 변수 목록이없는 경우 클래스는 사용되지 않습니다.
당신은 당신의 경우 클래스의 괄호가 누락되었습니다. 매개 변수 목록이없는 경우 클래스는 사용되지 않습니다.
이 시도:
abstract class MyAbstract case class MyFirst() extends MyAbstract case class MySecond() extends MyAbstract val x: MyAbstract = MyFirst() x match { case aOrB @ (MyFirst() | MySecond()) => doSomething(aOrB) case _ => doSomethingElse() }
당신이 당신의 경우 클래스에 대한 너무 많은 PARAMS이 긴 푸를 작성할 필요가 마음에 들지 않으면 (_, _, ..) 패턴, 어쩌면 :
x match { case aOrB @ (_:MyFirst | _:MySecond) => doSomething(aOrB) case _ => doSomethingElse() }
아니면 그냥 :
x match { case _:MyFirst | _:MySecond => doSomething(x) // just use x instead of aOrB case _ => doSomethingElse(x) }
그러나 아마 당신은 단지의 경우 객체 싱글 싶어?
abstract class MyAbstract case object MyFirst extends MyAbstract case object MySecond extends MyAbstract val x: MyAbstract = MyFirst x match { case aOrB @ (MyFirst | MySecond) => doSomething() case _ => doSomethingElse() }
from https://stackoverflow.com/questions/15655817/scala-multiple-type-pattern-matching by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 추가 "제공"종속성 / 테스트 작업 '클래스 경로를 실행하는 백업? (0) | 2019.11.06 |
---|---|
[SCALA] 스칼라에서 유효한 식별자 문자 (0) | 2019.11.06 |
[SCALA] 자동으로 우아하게 스파크 SQL에 DataFrame 평평 (0) | 2019.11.06 |
[SCALA] 스칼라 배 정의 (2 방법은 동일한 유형의 소거가) (0) | 2019.11.06 |
[SCALA] 이클립스, 안드로이드, 스칼라 간편한 있지만 작동하지 않는 (0) | 2019.11.06 |