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

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

本節主要內容linux

  1. REPL命令行高級使用
  2. 使用Scala進行Linux腳本編程
  3. 結束語

1. REPL命令行高級使用shell

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

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

那要怎麼辦呢?在REPL命令行中執行下列命令:服務器

先輸入:paste,而後按ctr+v鍵,能夠正常粘貼內容,中文也不會出現亂碼了:框架

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

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的起點,而非終點。

原文連接

相關文章
相關標籤/搜索