현재 스칼라 프로젝트에서 작업 중이며 작은 문제가 발생했습니다.일치 문 스칼라의 사례 개체
저는 현재 일치 선언문을 사용하여 사례 개체의 유형을 결정하고 있습니다. 나는 말함으로써이를 통해 갈거야 :
abstract class Symbol
case object program extends Symbol
case object stmt_list extends Symbol
case object stmt extends Symbol
case object expr extends Symbol
case object term_tail extends Symbol
case object term extends Symbol
case object factor_tail extends Symbol
case object factor extends Symbol
case object add_op extends Symbol
case object mult_op extends Symbol
def expected_symToIndex(expected_sym: Symbol): Int = expected_sym match {
case program => 0
case stmt_list => 1
case stmt => 2
case expr => 3
case term_tail => 4
case term => 5
case factor_tail => 6
case factor => 7
case add_op => 8
case mult_op => 9
}
이클립스, 이것은 나에게 변수 패턴 후
"패턴이 일치하지 않을 수 없다는 경고를주고있다 (SLS 8.1.1) 을 당신에게하는 경우 패키지의 오브젝트 프로그램과 일치 시키려면 다음과 같이 백틱을 사용해야합니다. ⇒ case program ⇒ "
첫 줄에. 다른 모든 것은 도달 할 수없는 코드입니다.
내 프로그램을 테스트 한 후이 메서드는 항상 0을 반환합니다 (메서드의 첫 번째 사례 개체 줄에서 항상 실행되기 때문에). 나는 케이스 객체 매치 메소드에 대해 조사해 왔지만 여기에서 일어나는 것과 비슷한 많은 자료를 찾지 못했습니다. 나는이 기호들이 그들 자신 안에서 변수가 아니기 때문에 혼란 스럽다. 그것들은 match 문 내부에서 검사 할 유형입니다.
또한 "프로그램"과 다른 테스트 된 값은 작동하지 않습니다. 이 같은 유형을 테스트하려고하면 :
case a: program => 0
컴파일러에서 "프로그램"유형을 찾을 수 없다고 말합니다.
감사합니다.
봉인 된 특성 대신 추상 클래스를 사용하는 이유가 있습니까? – fuzzycuffs
모든 케이스 오브젝트가 소문자 인 이유는 무엇입니까? 이 모든 대소 문자를 대문자로 만들었을 때 코드가 잘 컴파일되었습니다. – Tanjin