在Scala IDE中重命名.scala文件不会重命名该类

时间:2012-12-18 12:20:10

标签: eclipse scala scala-ide

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

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

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

3 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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