1. 程式人生 > >非典型的scala程序及其編譯後的結果

非典型的scala程序及其編譯後的結果

popu mark 存在 art object .net content div class文件

初學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程序及其編譯後的結果