2012-12-18 82 views

回答

11

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

可能不是一个完整的清单上为什么此对应的是不执行(A几个音符,但只给你一个想法)文件:

  1. 它会鉴于斯卡拉的简洁,这是浪费。 case class Foo(foo:String)对应于一个完整的,稍微复杂的Java类,但它在它自己的文件中似乎很浪费......
  2. 它会降低代码的可读性。有时你可以定义一个案例类的层次结构,这些类对应于(例如)发送给演员的各种消息。让他们一起强调他们的意图。
  3. 通常它是毫无意义的。 scala中的一个相对简单的定义,比如trait Fooer {def foo="foo"}可能被转换成各种类java,它们实现了特性的“默认实现接口”特性。对于scala语法所允许的嵌套对象/类/类型,这会变得更糟,并在一些常用的scala模式中使用。
  4. 有斯卡拉语义(尤其是密封的特性),实际上需要有一个单一的文件中定义的(信贷低于@DaveGriffith的评论)多类
+1

此外,还有Scala语义(特别是密封特征),实际上需要在单个文件中定义多个类。 –

1

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

1

scala中的文件名不必与文件中的任何类名匹配。你可以在scala文件中拥有你想要的类。尽管建议对齐,但包装结构也不必与文件夹结构相匹配。