非典型的scala程序及其编译后的结果

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-17 00:04   27   0

初学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


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP