当我使用 scalac 编译 file.scala 时,我最终得到 2 个输出,file.class 和 file$.class。这些文件之间有什么区别,哪个是适合然后运行的文件?我在执行“scala file”和“scala file$”之间得到明显不同的错误消息。
问问题
167 次
2 回答
1
Scalaobject
被编译为以“$”结尾的类,因为您可以拥有一个具有相同名称的“普通”类。但是对象的方法也作为“普通”类的静态方法公开,因此可以以您期望的名称调用它们。这是试图以对 Java / JVM 有意义的方式表示 scala 语义的工件,我鼓励您将其视为实现细节而不是重要的东西。
(@MattPutnam 的回答是正确的,匿名类(包括闭包)被编译为名称中带有 $es 的类文件,但这并不是导致您的 file$.class 在这个特定实例中的原因)
使用scala file
. 如果您对实现细节感兴趣,您可能还想尝试java -cp /path/to/scala-library.jar file
.
于 2014-10-17T21:42:04.747 回答
0
file$.class 是一些内部匿名类。在 Java 中它们非常明确,但在 Scala 中很容易忽略它们。如果您使用任何采用函数的方法,那么那里就会有一个隐式匿名类。贴出代码,我会指出来的。
于 2014-10-17T19:21:57.523 回答