2011-08-14 5 views
0

Eclipse에서 Scala 2.9.0.1로 작업하고 있습니다.이상한 Scala 컴파일러 동작을 설명하십시오.

내가 좋아하는 뭔가, 스칼라 클래스/특성 계층 구조를 가지고 더 복잡 제외

A.scala: trait A 
B.scala: trait B extends A 
C.scala: trait C extends B 

; 예를 들어 게시하기에 너무 큽니다.

그래서, C는에 간접적으로 의존하지만, A는 C.

I는를 변경하면 지금, 나는 사방 오류에 대해 아무것도 모르는, 그래서 난 내 길을 위로 작동합니다. 마지막으로 C에서 마지막 오류를 수정하면 컴파일러에서 A를 컴파일 할 수 없다고 알려줍니다. A는 어떤 식 으로든 C에 의존하지 않으므로 논리적 인 의미가 없습니다. 사실 그것은 컴파일러 버그라고 말할 것입니다. 이것은 여러 번 나에게 일어 났으며, A를 다시 변경하고 전체 클래스 계층 구조를 다시 수정해야하기 때문에 매우 실망 스럽습니다.

의 스칼라 컴파일러 ( 결과)를 얻을 수있는 방법이 있습니까? 나는이 행동을 취하는 유일한 사람인가?

+0

Eclipse의 Scala IDE는 여전히 베타 버전입니다. dev 팀이 SBT 스타일의 파일 종속성 추적 인프라를 포함 할 것으로 예상됩니다.이 인프라는 아마도 이러한 문제를 처리합니다. –

+0

최신 야간 빌드에는 이러한 문제를 처리해야하는 실험용 빌트인 빌더가 포함됩니다. 최신 야간을 설치하고 환경 설정> 스칼라> 컴파일러> 빌드 관리자에서 sbt를 선택하십시오. 이와 같은 문제가 계속 발생하면 문제가있는 작은 예제를 만들어 Scala IDE 문제 추적기에보고하십시오. –

+1

Scala 용 Eclipse 플러그인과 Eclipse 플러그인은 무엇을 사용하고 있습니까?이것은 매우 중요한 포인트입니다 - 스칼라 컴파일러 버그가 아닌 _eclipse plugin_ bug가 있습니다. –

답변

2

또한 스칼라 프로그램에는 오류의 "계층 구조"가있을 수 있으며, 특정 컴파일 오류는 다른 오류가 해결 될 때까지 나타나지 않습니다. 이 반드시 컴파일러의 버그가하지

한 가지 전략은 점진적으로 변경하는 것입니다 (다른 사람이 가능성이 트렁크에 고정되어있어 기존의 스칼라 IDE 빌더 버그라고한다.) :

  1. trait A 사본을 만들고 trait A2으로 전화하십시오.
  2. 표시되는 컴파일 오류를 수정하여 A2으로 원하는대로 변경하십시오. 아무것도 아직 A2에 의존하기 때문에 쉽습니다.
  3. 반복 등 B2, C2,

모든 것이 작동되면 들면, 수정 된 사람과 원래의 특성을 대체합니다. 개정 통제 (나는 자식을 사용한다)는이 과정에서 매우 도움이 될 수있다. 내가 유용

또 다른 일반적인 전술은 두 단계로 설계를 분할하는 것입니다

  1. 첫째, 코드 단지 유형을, 비어있는 모든 방법 몸을 떠나. 실제 코드가 나오기 전에 타입 오류를 수정하는 것이 훨씬 쉽습니다.

  2. 일단 유형이 일치하면 복잡한 컴파일 오류에 대한 걱정없이 독립적으로 메소드 정의를 채울 수 있습니다.

관련 문제