在腳本中運行Scala

在腳本中運行Scala、在腳本中使用Scala的高級特性、如何讓Scala腳本快速運行shell


Scala又一強大的功能就是能夠以腳本的形式運行。咱們能夠建立一個測試文件scala_shell_1_test.sh,內容以下:apache


#!/bin/shbash

exec scala -savecompiled "$0" "$@"ide

!#函數


println("Hello, Welcome to http://www.iteblog.com!")測試

args.foreach(println)spa


/*命令行

經過savecompiled命令能夠將這個scala_shell_1_test.sh腳本編譯成scala_shell_1_test.sh.jar包scala

而後每次經過下面的命令就能夠省去編譯步驟,直接執行blog

scala -cp /Users/michael/scala_shell_1_test.sh.jar Main a c d*/


而後咱們就能夠下面之一的方式運行這個Scala腳本:

[iteblog@www.iteblog.com iteblog]$ sh scala_shell_1_test.sh 

Hello, Welcome to http://www.iteblog.com!

或者

[iteblog@www.iteblog.com iteblog]$ chmod 744 scala.sh

[iteblog@www.iteblog.com iteblog]$ ./scala.sh a b c

Hello, Welcome to http://www.iteblog.com!

a

b

c


上面兩種運行方式就像運行shell腳本同樣,徹底不須要知道里面是Scala代碼。

 須要注意的是,在運行上述腳本必須事先配置好Scala環境,也就是能夠在命令行裏面直接用scala命令:

能夠將下面的內容加到你home目錄的.bashrc文件裏面或者是/etc/profile裏面

SCALA_HOME=/home/iteblog/scala-2.10.4

PATH=$PATH:$SCALA_HOME/bin


若是你須要傳參到Scala腳本里面,能夠將代碼修改爲:

#!/bin/sh

exec scala "$0" "$@"

!#


args.foreach(println)

上述代碼的第二行中的$0和$@分別獲取腳本的名稱和參數。args的類型是List[String],因此咱們可使用List的全部方法,好比args.length,args.getClass等,全部傳進腳本的參數均可以經過args變量獲取。

參考:http://www.iteblog.com/archives/1544


-------------------------------

在腳本中使用Scala最大的好處就是能夠在腳本中使用Scala的全部高級特性,好比咱們能夠在腳本中定義和使用Scala class,以下:

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


case class Iteblog(var site: String) {

        override def toString = site

}

println(Iteblog("http://www.ioteblog.com"))

運行這個腳本能夠輸出http://www.ioteblog.com。


咱們也能夠在腳本中使用main函數:

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


object HelloIteblog {

        def main(args: Array[String]) {

                println("Hello" + args.mkString(","))

        }

}


HelloIteblog.main(args)

 定義main函數和正常的寫法同樣,只不過咱們須要使用HelloIteblog.main(args)的形式調用這個main函數。


  不少時候,咱們編寫程序的時候每每是須要依賴外部的類。由於在腳本里面可使用全部Scala的特性,因此咱們也能夠在腳本中指定須要依賴的jar包,使用方法以下:

#!/bin/sh

exec scala -classpath "/Users/michael/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" "$0" "$@"

!#


import org.apache.commons.lang.StringUtils


println(StringUtils.trim("  ab  c  "))

println(StringUtils.trim("  ab  c  ").length)


咱們能夠看出,這些使用和編寫正常的Scala腳本很相似。

參考:http://www.iteblog.com/archives/1547

-------------------------------

文件test.sh

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


println("Hello, iteblog!!")

args foreach println

運行這個腳本,咱們能夠發現第一次運行的速度仍是很慢,可是當程序運行完,咱們能夠在同一目錄下發現一個名爲test.sh.jar

的jar文件,這就是編譯以後的class文件。第二次運行的時候,Scala會檢查該腳本是否修改了,若是沒有修改,會直接使用以前編譯好的test.sh.jar文件,因此之後運行速度會很快.

咱們能夠看出這些就是編譯後的class文件,咱們能夠經過scala命令去運行裏面的類:scala -cp /Users/michael/scala_shell_class_2_test.sh.jar Main

相關文章
相關標籤/搜索