Это звучит неловко. Моя цель — понять, как Scala обрабатывает операторы пакетов, написанные в стиле Java. С этой целью я написал небольшой пример класса (который я назвал DinnerTimeP.scala, как показано ниже:
package dinnertime
class Dinner {
val veggie = "broccoli"
def announceDinner(veggie: String) {
println("Dinner happens to be tasteless " + veggie + " soup")
}
}
У меня есть папка с именем scaladev, в которой я создал папку пакета, ужин. Под этим пакетом живет DinnerTimeP.scala. Затем по команде DOS я перехожу к обеду и компилирую файл 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
Я надеялся найти 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 и его скомпилированным файлом. Вместо этого я вижу новую папку пакета, сгенерированную Scala, внутри обеденной папки пакета.
Это может быть наивно. Я, вероятно, предаю фундаментальное понимание Scala и пакетов, но такое поведение меня озадачило. Это проблема, которую я не могу объяснить себе: почему вложенный пакет создается для вновь созданного файла класса. Это проблема, которую я надеялся решить, основываясь на своих собственных искренних усилиях. Поскольку мой опыт работы со Scala в настоящее время ограничен, я обратился к гуру Scala на stackoverflow, чтобы они помогли мне понять, что происходит. и почему? Есть ли причина, по которой этот вложенный пакет создается Scala, а не Java?