내가 나를 유형 Token
을 정의하기 위해 강제로 Scanners
에서 확장하는 클래스를 작성하고있어 내 토큰 클래스 자체는 Token
라고스칼라에서 유형 이름 충돌을 처리하는 방법은 무엇입니까?
object MyScanner extends Scanners {
type Token = ...
}
문제가된다 : 그것은에
abstract class Token(...)
case class Literal(...)
...
인가 스칼라 어떻게 든 Token
Scanners
의 유형을 내 Token
클래스로 정의 할 수 있습니까?
type Token = Token
분명히 작동하지 않습니다.
I는 다음과 같이 (main.scala
로 시작하는) 전체 패키지 이름을 사용하여 시도 :
type Token = main.scala....Token
이 난 MyScanner
내부 main
함수를 정의한 바와 같이 다른 이름으로 충돌한다.
내 현재 솔루션은 내 토큰 클래스의 이름을 바꾸는 것입니다. 초기 이름을 지킬 수있는 또 다른 곳이 있습니까?
또 다른 해결책은 'MyScanner'의 어휘 '유형'을 'MyScannerType'(또는 이와 비슷한 이름)으로 바꾸는 것입니다. – GoZoner
'import'를 통해 접근하는 이름의 이름을 바꿀 수 있습니다 :'import org.foo.bar. {This => That}'는'org.foo.bar.This'를 가져 오되'That'로 이름을 변경합니다. 또한 이름을 버리고 와일드 카드 가져 오기에서 효과적으로 제외시킬 수 있습니다 :'import org.foo.bar. {Florp => _, _}'. 이것은'org.foob.bar' _except_'Florp'에서 모든 심볼을 임포트합니다. –
이것은 중요한 질문이므로 질문 해 주셔서 감사합니다. 그러나 [Scala 명명 규칙] (http://docs.scala-lang.org/style/naming-conventions. html)을 사용하면 com.foo.main이라는 패키지를 참조 할 수 있습니다. 단순한 클래스 이름은 좋은 생각이지만, 패키지 이름은 조직 내에서 다른 조직이나 다른 프로젝트가 동일한 완전한 이름을 사용하지 않도록 충분히 고유해야합니다. –