これは恥ずかしいですね。私の目的は、ScalaがJavaスタイルで書かれたパッケージステートメントをどのように扱うかを理解することです。この目的のために、私は小さなサンプルクラスを作成しました(以下のようにDinnerTimeP.scalaという名前を付けました:
package dinnertime
class Dinner {
val veggie = "broccoli"
def announceDinner(veggie: String) {
println("Dinner happens to be tasteless " + veggie + " soup")
}
}
私はscaladevというフォルダーを持っており、その下にパッケージフォルダーdinnertimeを作成しました。このパッケージの下にはDinnerTimeP.scalaがあります。次に、DOSコマンドでdinnertimeに移動し、DinnerTimePファイル(名前はばかげているように聞こえます)を以下のようにscalacでコンパイルします。
C:\scala-2.9.1.final\scala-2.9.1.final\scaladev\dinnertime>set CLASSPATH=.;C:\scala- 2.9.1.final\scala-2.9.1.final\scaladev
C:\scala-2.9.1.final\scala-2.9.1.final\scaladev\dinnertime>scalac DinnerTimeP.scala
私は、dinnertimeフォルダーのすぐ下に生成されたDinner.classを見つけ、ソースファイルDinnerTimeP.scalaの隣に座っていることを望んでいました。理解を確認するために、同じフォルダーの下にHelloWorld.javaプログラムを作成しました。
package dinnertime;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
コマンドラインでHelloWorld.javaを次のようにコンパイルしました:C:\ scala-2.9.1.final \ scala-2.9.1.final \ scaladev \dinnertime> javac HelloWorld.java
HelloWorld.classファイルは、そのソースファイルのすぐ隣に生成されました。これは、Scalaソースファイルとそのコンパイル済みファイルで見たかった正確な状況でした。代わりに、パッケージフォルダーdinnertime内にScalaによって生成された新しいパッケージフォルダーが表示されます。
これはナイーブかもしれません。私はおそらくScalaとパッケージの基本的な理解を裏切っていますが、この振る舞いに戸惑いました。これは私が自分自身に説明できない問題です。新しく生成されたクラスファイル用にネストされたパッケージが作成されるのはなぜですか。これは、私自身の真摯な努力に基づいて解決したいと思っていた問題です。現時点でのScalaの経験は限られているため、何が起こっているのかを理解するために、stackoverflowでScalaの達人に尋ねることに頼りました。なぜ?このネストされたパッケージがJavaではなくScalaによって作成される理由はありますか?