欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

0022. 运行scala的脚本

程序员文章站 2022-04-30 22:14:02
...

如何写脚本
直接写脚本,然后用scala命令去执行。在d盘下创建test.scala文件,内容如下:

import scala.io.Source
def file(path:String):Iterator[String] = Source.fromFile(path)("utf-8").getLines();
var iter = file("d:/test.scala")
iter.foreach(println)

执行scala d:/test.scala命令。

使用main入口

import scala.io.Source
object hello extends App {
   def file(path:String):Iterator[String] = Source.fromFile(path)("utf-8").getLines();
   var iter = file("d:/test.scala")
   iter.foreach(println)
}

这样在当前文件中的定义就必须放到hello中了。scala会自动执行hello中的代码。

命令行参数
在启动scala命令行时,可以设置scala可用内存大小,如下两个命令任选其一:

scala -J-Xms64M -J-Xmx512M 
env JAVA_OPS="-Xms64M -Xmx512M" scala

其中Xms表示初始内存大小,Xmx表示最大能使用的内存。
scala命令行中,可以设置classpath,这样引入第三方的jar包或者类会比较方便,如下:

scala -classpath "../project1/bin:../project2/classes"

进入REPL后可以直接引入某个jar文件或加载某个scala文件:

:require DateUtils.jar
:load examp.scala

也可以在scala命令行中直接指定进入REPL后运行某个脚本:

scala -i examp.scala

REPL中可以直接调用sh运行某个命令:

:sh ls -al

实际上调用的是sys.process包中的代码,也可以如下执行:

import sys.process._
"ls -al"!

编译命令

scalac hello.scala
scala hello

编译类到指定目录:

scalac -classpath lib/DateUtils.jar -d ./classes src/com/examp/*
scala -classpath lib/DateUtils.jar com.examp.Main

反编译:

scalac -Xprint:parse hello.scala
scalac -Xprint:all hello.scala

作为脚本执行

#!/bin/sh
exec scala -savecompiled -classpath "lib/a.jar:lib/b.jar" "$0" "[email protected]"
!#
args.foreach(println)

执行sh test.scala,会在第1次执行时生成编译后的test.jar文件,再次运行时如果没有修改过,会运行的更快。