일부 사례 클래스와의 비교를 수행하고 있으며 두 가지 사례를 동일한 방식으로 처리하려고합니다. 이런 식으로 뭔가 :여러 사례 클래스를 스칼라로 일치
abstract class Foo
case class A extends Foo
case class B(s:String) extends Foo
case class C(s:String) extends Foo
def matcher(l: Foo): String = {
l match {
case A() => "A"
case B(sb) | C(sc) => "B"
case _ => "default"
}
}
하지만이 작업을 수행 할 때 오류 얻을 :
(fragment of test.scala):10: error: illegal variable in pattern alternative
case B(sb) | C(sc) => "B"
나는 그것이 내가의 작업을 진행 B와 C의 정의에서 매개 변수를 제거하지만 난 어떻게 일치시킬 수 있습니다 매개 변수는?
나의 예는 그것을 보여주지 않지만 나는 그 매개를 필요로하고있다. 나는 단지 물건을 사용해야 할 것 같은데. 감사! – timdisney
scala가 "case A (aString) | case B (aString) => println (aString)"을 허용하지 않는 이유가 있습니까? aString의 유형이 A와 B 모두에 대해 동일 할 때처럼 보입니다. 허용되어야합니다. 마지막 사례는 B와 C 사례를 복제하지 않는 것이 더 나을 것 같습니다. –
나는 너를 하나 더 가야겠다. 나는'case A (x) |를 갖는 것이 좋을 것이라고 생각한다. B (x) => println (x)'A (x)와 B (x)가 생성하는 타입 시스템에서'x'의 타입이 상한으로 설정되는 곳에서 허용 될 수 있습니다. –