Scala入門(mén)到精通——第三十節(jié) Scala腳本編程與結(jié)束語(yǔ)

摘要:?本節(jié)主要內(nèi)容 REPL命令行高級(jí)使用 使用Scala進(jìn)行Linux腳本編程 結(jié)束語(yǔ) 1. REPL命令行高級(jí)使用 在使用REPL命令行時(shí)征懈,有時(shí)候我們需要粘貼的代碼比較大谋逻,而普通的粘貼可能會(huì)些一些問(wèn)題兔辅,比如中文粘貼會(huì)出現(xiàn)亂碼卜高、多行代碼粘貼時(shí)會(huì)出錯(cuò)占贫,此時(shí)需要用到REPL的高級(jí)功能琅锻。在日常開(kāi)發(fā)過(guò)程中帮掉,我們粘貼多行代碼的時(shí)候會(huì)遇到下列問(wèn)題: //本意是要粘貼下面兩行代碼

本節(jié)主要內(nèi)容

REPL命令行高級(jí)使用

使用Scala進(jìn)行Linux腳本編程

結(jié)束語(yǔ)

1. REPL命令行高級(jí)使用

在使用REPL命令行時(shí)咙俩,有時(shí)候我們需要粘貼的代碼比較大耿戚,而普通的粘貼可能會(huì)些一些問(wèn)題,比如中文粘貼會(huì)出現(xiàn)亂碼阿趁、多行代碼粘貼時(shí)會(huì)出錯(cuò)膜蛔,此時(shí)需要用到REPL的高級(jí)功能。在日常開(kāi)發(fā)過(guò)程中脖阵,我們粘貼多行代碼的時(shí)候會(huì)遇到下列問(wèn)題:

而對(duì)于一些長(zhǎng)串跨行的代碼皂股,可能會(huì)出現(xiàn)報(bào)錯(cuò),例如:

那要怎么辦呢命黔?在REPL命令行中執(zhí)行下列命令:

先輸入:paste呜呐,然后按ctr+v鍵就斤,可以正常粘貼內(nèi)容,中文也不會(huì)出現(xiàn)亂碼了:

另外卵史,在實(shí)際開(kāi)發(fā)過(guò)程中战转,有些人會(huì)認(rèn)為這種處理方式非常繁瑣,Scala的創(chuàng)建者也為我們考慮過(guò)這個(gè)問(wèn)題了以躯,我們也可以在scala IDE for eclipse (在Intellij IDEA 中也有這個(gè)功能) 里面利用REPL命令行槐秧,使用方式是創(chuàng)建scala worksheet,創(chuàng)建方式如下:?

1 點(diǎn)擊相應(yīng)的包忧设,然后右鍵刁标,在new菜單中選擇 scala worksheet?

2 在文件中輸入相應(yīng)的scala語(yǔ)句,worksheet會(huì)自動(dòng)打印出相應(yīng)的結(jié)果?

但是worksheet對(duì)中文的支持很不友好址晕,例如下面的代碼:

worksheet最終得到的中文是亂碼膀懈,因此在實(shí)際進(jìn)行語(yǔ)言特性測(cè)試的時(shí)候盡量避免中文

scala中還有很多我們實(shí)際中沒(méi)有接觸過(guò)的命令,可以用 :help命令查看REPL現(xiàn)在支持的所有命令:

2. 使用Scala進(jìn)行Linux腳本編程

本節(jié)Linux腳本內(nèi)容大部分來(lái)源于scala cookbook谨垃,部分經(jīng)過(guò)本人修改以在Ubuntu Linux上進(jìn)行演示启搂。

我們?cè)诘谝还?jié)中提到,Scala不僅僅可以進(jìn)行大規(guī)模分布式應(yīng)用程序開(kāi)發(fā)(例如Spark內(nèi)存計(jì)算框架)刘陶,也可以進(jìn)行服務(wù)器端腳本編程即它可以替代Linux中的shell (Bourne Shell, Bash)或其它如 Perl, PHP, Ruby等可用于服務(wù)器端腳本編程的語(yǔ)言胳赌。下面給出的是一個(gè)簡(jiǎn)單示例(前提是要有l(wèi)inux操作系統(tǒng),本節(jié)所有示例都是在ubuntu Linux下運(yùn)行的):

將上面的內(nèi)容保存為hello.sh文件匙隔,然后用下列命令增加其執(zhí)行權(quán)限:

可以看到我們第一個(gè)服務(wù)器腳本已經(jīng)運(yùn)行成功疑苫。前面的代碼中,#!符號(hào)表示的是Unix shell腳本的開(kāi)始,它會(huì)調(diào)用Unix Bourne shell纷责。exce命令是內(nèi)置的shell捍掺,表示需要執(zhí)行scala 命令,其中0綁定的是hello.sh腳本名稱再膳,@ 綁定的是我們輸入的參數(shù)挺勿。!#表示腳本聲明頭部的結(jié)束。在腳本中可以使用任何的scala語(yǔ)法喂柒,例如:

上述代碼執(zhí)行結(jié)果:

除此之外满钟,我們還可以定義應(yīng)用程序?qū)ο螅梢詳U(kuò)展自App胳喷,也可以實(shí)現(xiàn)自己的Main方法,例如:

下面給出的是不帶參數(shù)的執(zhí)行結(jié)果:

下面給出的是帶參數(shù)的執(zhí)行結(jié)果夭织,如:

當(dāng)然吭露,還可以實(shí)現(xiàn)自己的main方法,如:

同extends App是一樣的尊惰。

如果腳本中需要應(yīng)用到第三方庫(kù)的話讲竿,可以采用下列方式進(jìn)行包引入:

通過(guò)上述代碼不難發(fā)現(xiàn)泥兰,腳本編程與一般的Scala應(yīng)用程序開(kāi)發(fā)有著非常多的相似之處,不同之處僅在于在腳本編程需要加入下面這樣的樣板代碼

有時(shí)候题禀,我們也需要對(duì)命令行參數(shù)進(jìn)行捕獲(例如判斷命令行的個(gè)數(shù)或輸入的參數(shù)類型等)鞋诗,然后進(jìn)行相應(yīng)的操作,前面已經(jīng)演示了如何打印輸出命令行參數(shù)迈嘹,這里我們更多實(shí)際中可能會(huì)遇到的一些經(jīng)典案例:

1 判斷輸入?yún)?shù)的個(gè)數(shù)削彬,不滿足要求則給出提示

執(zhí)行結(jié)果如下:

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

下面給出的是其執(zhí)行結(jié)果:

3 加速代碼的執(zhí)行:

scala腳本在執(zhí)行的過(guò)程中秀仲,也是通過(guò)編譯融痛、執(zhí)行的步驟來(lái)進(jìn)行的,有時(shí)候?yàn)榧铀倌_本的執(zhí)行神僵,意圖是將編譯后的腳本保存下來(lái)雁刷,在執(zhí)行時(shí)候如果腳本創(chuàng)建之后沒(méi)有發(fā)生變化的話,則直接使用以前編譯好的腳本保礼。實(shí)現(xiàn)方式是在腳本聲明的時(shí)候用-savecompiled沛励。

它的原理是在代碼第一次執(zhí)行后,生成相應(yīng)的jar文件炮障,當(dāng)下次再執(zhí)行的便調(diào)用該jar文件來(lái)執(zhí)行目派,第一次執(zhí)行后生成的jar文件如下:?

3. 結(jié)束語(yǔ)

本節(jié)內(nèi)容是scala入門(mén)到精通系列課程的最后一節(jié),通過(guò)本課程铝阐,我相信可以讓大家成為一個(gè)中級(jí)scala語(yǔ)言開(kāi)發(fā)者址貌。Scala語(yǔ)言功能非常強(qiáng)大,其中內(nèi)容還有很多徘键,還有許多內(nèi)容我們沒(méi)有涉及练对,例如scala 的GUI編程、Scala的定界延續(xù)等吹害,但這些功能在實(shí)際開(kāi)發(fā)中應(yīng)用的并不是特別廣泛螟凭,特別是Scala GUI編程,我們知道java在GUI編程方面并不是它的強(qiáng)項(xiàng)它呀,scala語(yǔ)言也是如此螺男。這門(mén)課程的目的是讓大家學(xué)完之后能夠快速上手spark應(yīng)用程序開(kāi)發(fā),希望在學(xué)完本課程之后纵穿,大家將這門(mén)課作為自己學(xué)習(xí)scala的起點(diǎn)下隧,而非終點(diǎn)。

原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谓媒,一起剝皮案震驚了整個(gè)濱河市淆院,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌句惯,老刑警劉巖土辩,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件支救,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拷淘,警方通過(guò)查閱死者的電腦和手機(jī)各墨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)启涯,“玉大人贬堵,你說(shuō)我怎么就攤上這事∈藕浚” “怎么了扁瓢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)补君。 經(jīng)常有香客問(wèn)我引几,道長(zhǎng),這世上最難降的妖魔是什么挽铁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任伟桅,我火速辦了婚禮,結(jié)果婚禮上叽掘,老公的妹妹穿的比我還像新娘楣铁。我一直安慰自己,他們只是感情好更扁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布盖腕。 她就那樣靜靜地躺著,像睡著了一般浓镜。 火紅的嫁衣襯著肌膚如雪溃列。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天膛薛,我揣著相機(jī)與錄音听隐,去河邊找鬼。 笑死哄啄,一個(gè)胖子當(dāng)著我的面吹牛雅任,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咨跌,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沪么,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锌半?” 一聲冷哼從身側(cè)響起禽车,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后哭当,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冗澈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年钦勘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亚亲。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彻采,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捌归,到底是詐尸還是另有隱情肛响,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布惜索,位于F島的核電站特笋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巾兆。R本人自食惡果不足惜猎物,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望角塑。 院中可真熱鬧蔫磨,春花似錦、人聲如沸圃伶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窒朋。三九已至搀罢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼邀,已是汗流浹背魄揉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拭宁,地道東北人洛退。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杰标,于是被迫代替她去往敵國(guó)和親兵怯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容