当我使用scalac编译file.scala时,我最终得到2个输出,file.class和文件$ .class。这些文件之间有什么区别,哪个是适当的运行?我在执行" scala文件"之间得到截然不同的错误消息。 vs" scala文件$"。
答案 0 :(得分:1)
Scala object
被编译到以" $"结尾的类因为你被允许拥有一个普通的"具有相同名称的类。但是对象的方法也作为静态方法暴露在普通"普通" class,以便可以在您期望的名称下调用它们。这是一个尝试以对Java / JVM有意义的方式表示scala语义的工件,我鼓励您将其视为实现细节,而不是重要的东西。
(@ MattPutnam的回答是正确的,包括闭包在内的匿名类被编译为名称中带有$ es的类文件,但这并不是导致文件$ .class的原因在这个特定的例子中)
使用scala file
。如果您对实施细节感兴趣,可能还需要尝试java -cp /path/to/scala-library.jar file
。
答案 1 :(得分:0)
文件$ .class是一些内部匿名类。在Java中,它们非常明确,但在Scala中很容易被遗漏。如果你使用任何带函数的方法,那里就有一个隐含的匿名类。发布代码,我会指出它。