Scala 初探.二(package组织方式)

Scala 初探.二(package组织方式)

多个文件的package组织方式

1
2
3
4
5
6
//a.scala 
package com.east
import com.west._
object objectMain extends App{
println("add Function from west used in east, 1+2=%d".format(Add.add(1,2)))
}
1
2
3
4
5
//b.scala 
package com.west
object Add {
def add(a:Int, b:Int) = a + b
}

多个文件的package组织方式

编译 scalac a.scala b.scala 生成com文件夹(JVM 编译完的.class文件)
运行 scala com.east.main 正确打印信息

object main 方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//c.scala 
package com.north
object NorthWolf {
def main(args:Array[String]){
println("add Function from west used in north, 3+4=%d".format(Add.add(3,4)))
}
}
```
编译 `scalac a.scala b.scala c.scala` 更新com文件夹
运行 `scala com.north.NorthWolf` 正确打印信息

Makefile 如下
```Makefile
objects = com
source = a.scala b.scala c.scala

.PHONY: run
run:com
scala com.east.objectMain
scala com.north.NorthWolf

$(objects) : $(source)
scalac $(source)

SCALA编译生成的com为package目录, *.class 为class字节码,可以被JVM执行
(所以SCALA编译玩的.scala可以在任何JVM上执行,也就说scala的程序也可以在Android上运行)
比如com/east/main.class ,可以直接scala com.east.main来执行

1
2
3
4
5
6
7
8
9
10
11
12
$:tree com 
com
├── east
│ ├── main$.class
│ ├── main$delayedInit$body.class
│ └── main.class
├── north
│ ├── NorthWolf$.class
│ └── NorthWolf.class
└── west
├── Add$.class
└── Add.class

关于*.scala 和 *$.scala 的区别可以在网上自行搜索

原则上只要把com文件夹打包就可以发布为一个SCALA/JAVA程序

jar打包和运行

如何讲程序打包成jar 命令行运行jar cvf com.jar com 得到com.jar
在任意地方 scala -classpath com.jar com.north.NorthWolf 可直接运行函数

实例参见目录/nutstore/2017pc/lab/scala/packageTest

评论