4

当我通过 Eclipse 重命名 .scala 文件时,类名本身不会被重命名。

这是预期的行为吗?它似乎没有破坏任何东西。

我希望它被重命名,来自 Java 背景,文件名/类名必须彼此相等。

4

3 回答 3

12

scala 中不需要类名和文件名之间的对应关系。您可以(并且通常会)在每个 scala 文件中定义多种类型。编译器将尝试为每个公共类型创建一个不同的 .class 文件,文件名对应于类型名称,以实现与 java 的互操作性(对于在 java 中没有直接对应关系的复杂或嵌套类型,scalac 将生成 .具有奇怪/损坏名称的类文件...)

关于为什么不强制执行这种通信的一些说明(可能不是完整的列表,只是为了给您一个想法):

  1. 考虑到 scala 的简洁性,这将是一种浪费。case class Foo(foo:String)对应于一个完整且有些复杂的java类,但是将它放在自己的文件中似乎很浪费......
  2. 它会降低代码的可读性。有时,您定义案例类的层次结构,这些类与(例如)您发送给参与者的各种消息相对应。让他们在一起强调了他们的意图。
  3. 通常这是没有意义的。scala 中相对简单的定义,liketrait Fooer {def foo="foo"}可以转换为各种类似 java 的类型,它们实现了特征的“具有默认实现的接口”性质。对于 scala 语法允许并用于一些常见 scala 模式的嵌套对象/类/类型,这会变得更糟。
  4. 有 Scala 语义(特别是密封特征)实际上需要在单个文件中定义多个类(归功于 @DaveGriffith 下面的评论)
于 2012-12-18T12:32:13.343 回答
1

在 scala 中,一个 .scala 文件可以包含许多(公共)类或包。

于 2012-12-18T12:28:34.013 回答
1

scala 中的文件名不必与文件中的任何类名匹配。您可以在 scala 文件中拥有任意数量的类。包结构也不必与文件夹结构匹配,但建议对齐。

于 2012-12-18T12:29:42.513 回答