Scala:scalac中file.class和file$.class之间的区别



当我使用scalac编译file.scala时,我最终会得到两个输出,file.class和file$.class。这些文件与运行哪个文件有什么区别?在执行"scala-file"one_answers"scala-file$"之间,我得到明显不同的错误消息。

Scala object被编译为以"$"结尾的类,因为您可以拥有一个同名的"普通"类。但是,对象的方法也作为"普通"类上的静态方法公开,因此可以使用您期望的名称来调用它们。这是一个尝试以对Java/JVM有意义的方式表示scala语义的工件,我鼓励您将其视为实现细节,而不是重要的东西。

(@MattPutnam的答案是正确的,包括闭包在内的匿名类被编译为名称中包含$es的类文件,但在这个特定的实例中,这并不是导致文件$.class的原因)

使用scala file。如果您对实现细节感兴趣,也可以尝试java -cp /path/to/scala-library.jar file

file$.class是一个内部匿名类。在Java中,它们非常明确,但在Scala中很容易被忽略。如果您使用任何接受函数的方法,就会有一个隐式匿名类。张贴代码,我会指出它。

相关内容

  • 没有找到相关文章

最新更新