非典型的scala程序及其編譯後的結果
初學Scala
Folder structure以及部分代碼
package.scala的代碼
package comx package object mypkg { def myprint = println("Hello Ji2 in package object") } object mypkg2{ def myprint = println("Hello Ji2 in object") }
命令行
>scalac mypkg/package.scala newt.scala
>scala Test2
結果
Hello Ji2 in package object () Hello Ji2 in package object () Hello Ji2 in object ()
======================
分析:
代碼初學好的時候。src以下僅僅有一個文件newt.scala 和一個目錄mypkg, 內涵package.scala,
運行了scalac以後。 src以下多了幾個class。 多了一個comx folder
comx folder
mypkg folder
可見
1 scala的package 語句指定了class文件的生成的地方,即使原來不存在
2 package object 的定義文件package.scala 應該是在mypkg folder中
3 object 的class文件 在package指定的folder下
4.package object 沒有相應的class。 在package.class中。 變為package comx.mypkg, 成了pakage結構的一層
5. newt.scala中, object 的名字是Test2, 所以scala命令的參數是Test2, 而不是newt, 否則報錯
後記。對於第二點我又做了實驗
把src/mypkg -> mypkg2 ,裏面的文件package.scala ->package_n.scala,
package_n.scala加了一個package object定義
package object mypkg3 { def myprint = println("Hello Ji3 in package object") }
結果和上次的差異
comx以下變成了兩個folder :mypkg & mypkg3
結論:
package object的定義文件的名字隨意,位於的folder名字也隨意,
反而是每一個package object的名字會生成一個folder。裏面都是各自己定義相應的class: package.class & package$.class
非典型的scala程序及其編譯後的結果