2014-10-17 1 views
0

scalac을 사용하여 file.scala를 컴파일 할 때 file.class와 file $ .class의 두 출력으로 끝납니다. 이 파일 들간의 차이점은 무엇이며, 그 중 적절한 것이 실행됩니까? "scala file"vs "scala file $"을 실행하는 것과는 분명히 다른 오류 메시지가 나타납니다.

답변

0

파일 $ .class는 일부 내부 익명 클래스입니다. 자바에서는 매우 명시 적이지만 스칼라에서는 놓칠 수 있습니다. 함수를 사용하는 메서드를 사용하면 거기에 암시 적으로 익명의 클래스가 있습니다. 코드를 게시하면 그것을 지적하겠습니다.

1

스칼라 object 같은 이름의 "일반"클래스를 사용할 수 있으므로 "$"로 끝나는 클래스로 컴파일됩니다. 그러나 객체의 메서드는 "일반"클래스에서 정적 메서드로도 노출되므로 예상 한 이름으로 호출 할 수 있습니다. 이것은 Java/JVM에서 이해할 수있는 방식으로 스칼라 의미를 표현하려고 시도한 결과물이며 중요한 내용이 아닌 구현 세부 사항으로 간주하는 것이 좋습니다.

(MattPutnam의 대답은 폐쇄를 포함한 익명 클래스는, 이름에 $ 말이지와 클래스 파일로 컴파일하는 것이 정확하지만이 특정 인스턴스에 파일 $을 .class 원인을하지 무엇 @)

사용 scala file . 구현 세부 정보에 관심이 있다면 java -cp /path/to/scala-library.jar file을 사용해 보시기 바랍니다.

관련 문제