1. 程式人生 > >Scala入門到精通——第三十節 Scala腳本編程與結束語

Scala入門到精通——第三十節 Scala腳本編程與結束語

box nds sel 實現 增加 book ubun int 第三方

摘要: 本節主要內容 REPL命令行高級使用 使用Scala進行Linux腳本編程 結束語 1. REPL命令行高級使用 在使用REPL命令行時,有時候我們需要粘貼的代碼比較大,而普通的粘貼可能會些一些問題,比如中文粘貼會出現亂碼、多行代碼粘貼時會出錯,此時需要用到REPL的高級功能。在日常開發過程中,我們粘貼多行代碼的時候會遇到下列問題: //本意是要粘貼下面兩行代碼

本節主要內容

  1. REPL命令行高級使用

  2. 使用Scala進行Linux腳本編程

  3. 結束語

1. REPL命令行高級使用

在使用REPL命令行時,有時候我們需要粘貼的代碼比較大,而普通的粘貼可能會些一些問題,比如中文粘貼會出現亂碼、多行代碼粘貼時會出錯,此時需要用到REPL的高級功能。在日常開發過程中,我們粘貼多行代碼的時候會遇到下列問題:

技術分享圖片

而對於一些長串跨行的代碼,可能會出現報錯,例如:

技術分享圖片

那要怎麽辦呢?在REPL命令行中執行下列命令:

技術分享圖片

先輸入:paste,然後按ctr+v鍵,可以正常粘貼內容,中文也不會出現亂碼了:

技術分享圖片

另外,在實際開發過程中,有些人會認為這種處理方式非常繁瑣,Scala的創建者也為我們考慮過這個問題了,我們也可以在scala IDE for eclipse (在Intellij IDEA 中也有這個功能) 裏面利用REPL命令行,使用方式是創建scala worksheet,創建方式如下:

1 點擊相應的包,然後右鍵,在new菜單中選擇 scala worksheet

技術分享圖片

2 在文件中輸入相應的scala語句,worksheet會自動打印出相應的結果

技術分享圖片

但是worksheet對中文的支持很不友好,例如下面的代碼:

技術分享圖片

worksheet最終得到的中文是亂碼,因此在實際進行語言特性測試的時候盡量避免中文

scala中還有很多我們實際中沒有接觸過的命令,可以用 :help命令查看REPL現在支持的所有命令:

技術分享圖片

2. 使用Scala進行Linux腳本編程

本節Linux腳本內容大部分來源於scala cookbook,部分經過本人修改以在Ubuntu Linux上進行演示。

我們在第一節中提到,Scala不僅僅可以進行大規模分布式應用程序開發(例如Spark內存計算框架),也可以進行服務器端腳本編程即它可以替代Linux中的shell (Bourne Shell, Bash)或其它如 Perl, PHP, Ruby等可用於服務器端腳本編程的語言。下面給出的是一個簡單示例(前提是要有linux操作系統,本節所有示例都是在ubuntu Linux下運行的):

技術分享圖片

將上面的內容保存為hello.sh文件,然後用下列命令增加其執行權限:

技術分享圖片

可以看到我們第一個服務器腳本已經運行成功。前面的代碼中,#!符號表示的是Unix shell腳本的開始,它會調用Unix Bourne shell。exce命令是內置的shell,表示需要執行scala 命令,其中0綁定的是hello.sh腳本名稱,@ 綁定的是我們輸入的參數。!#表示腳本聲明頭部的結束。在腳本中可以使用任何的scala語法,例如:

技術分享圖片

上述代碼執行結果:

技術分享圖片

除此之外,我們還可以定義應用程序對象,可以擴展自App,也可以實現自己的Main方法,例如:

技術分享圖片

下面給出的是不帶參數的執行結果:

技術分享圖片

下面給出的是帶參數的執行結果,如:

技術分享圖片

當然,還可以實現自己的main方法,如:

技術分享圖片

同extends App是一樣的。

如果腳本中需要應用到第三方庫的話,可以采用下列方式進行包引入:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

通過上述代碼不難發現,腳本編程與一般的Scala應用程序開發有著非常多的相似之處,不同之處僅在於在腳本編程需要加入下面這樣的樣板代碼

技術分享圖片

有時候,我們也需要對命令行參數進行捕獲(例如判斷命令行的個數或輸入的參數類型等),然後進行相應的操作,前面已經演示了如何打印輸出命令行參數,這裏我們更多實際中可能會遇到的一些經典案例:
1 判斷輸入參數的個數,不滿足要求則給出提示

技術分享圖片

執行結果如下:

技術分享圖片

2 交互式命令行,提示用戶輸入

技術分享圖片

下面給出的是其執行結果:

技術分享圖片

3 加速代碼的執行:
scala腳本在執行的過程中,也是通過編譯、執行的步驟來進行的,有時候為加速腳本的執行,意圖是將編譯後的腳本保存下來,在執行時候如果腳本創建之後沒有發生變化的話,則直接使用以前編譯好的腳本。實現方式是在腳本聲明的時候用-savecompiled。

技術分享圖片

它的原理是在代碼第一次執行後,生成相應的jar文件,當下次再執行的便調用該jar文件來執行,第一次執行後生成的jar文件如下:

技術分享圖片

3. 結束語

本節內容是scala入門到精通系列課程的最後一節,通過本課程,我相信可以讓大家成為一個中級scala語言開發者。Scala語言功能非常強大,其中內容還有很多,還有許多內容我們沒有涉及,例如scala 的GUI編程、Scala的定界延續等,但這些功能在實際開發中應用的並不是特別廣泛,特別是Scala GUI編程,我們知道java在GUI編程方面並不是它的強項,scala語言也是如此。這門課程的目的是讓大家學完之後能夠快速上手spark應用程序開發,希望在學完本課程之後,大家將這門課作為自己學習scala的起點,而非終點。

原文鏈接


Scala入門到精通——第三十節 Scala腳本編程與結束語