: 문제는 그 패턴 매칭이다케이스 클래스, 패턴 매칭 및 스칼라
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
과 :
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
다음은 작동하지 않습니다 카레트 인자는 효과가없는 것처럼 보입니다. 이 문제를 해결할 수 있습니까?
첫 번째 예제가 작동하지만 추악한 typecasting을 수행하지 않고 case 문에서 B.a 및 B.b에 액세스 할 수 없습니다. 또한 편집 할 때 왜 생성자 패턴이 카레되지 않았는지 알지 못합니다. 적용을 취소했기 때문입니까? –
솔직하게 나는 왜 그것이 작동하는지 전혀 모른다. 나는 시행 착오를 통해 그것을 우연히 발견했다. 이것은 Scala 사양의 어딘가에서 확실히 언급됩니다. 귀하의 사건과 관련이 있다면 그것을 찾아보고 싶을 수도 있습니다. – agilesteel
예, case 문에서 사용하는 패턴은 적용 취소 함수의 결과로 제공되는 패턴입니다. 그것은 결코 카레 될 수 없다. 스칼라 스펙의 해당 섹션은 §8.1.8입니다. – Nicolas