scala的類(lèi)型推斷機(jī)制(spark林子雨scala課后答案)
- 夕逆IT
- 開(kāi)發(fā)語(yǔ)言
- 2023-08-13
- 78
各位老鐵們好,相信很多人對(duì)scala的類(lèi)型推斷機(jī)制都不是特別的了解,因此呢,今天就來(lái)為大家分享下關(guān)于scala的類(lèi)型推斷機(jī)制以及spark林子雨scala課后答案的問(wèn)題...
各位老鐵們好,相信很多人對(duì)scala的類(lèi)型推斷機(jī)制都不是特別的了解,因此呢,今天就來(lái)為大家分享下關(guān)于scala的類(lèi)型推斷機(jī)制以及spark林子雨scala課后答案的問(wèn)題知識(shí),還望可以幫助大家,解決大家的一些困惑,下面一起來(lái)看看吧!
Scala和java比較
1、scala可以編寫(xiě)腳本,編寫(xiě)一個(gè).scala的腳本代碼,直接用同scalax.scala進(jìn)行執(zhí)行。但同時(shí)scala也可以類(lèi)似java,通過(guò)scalac編譯為.class等形式,基于編譯執(zhí)行。
2、scala可以在交互式的命令中直接編碼運(yùn)行。
3、支持隱式變量定義,通過(guò)var關(guān)鍵詞定義一個(gè)變量,具體變量類(lèi)型在賦值后,scala自行進(jìn)行類(lèi)型推斷。例如vara=List(1,2,3)4、常量定義用val關(guān)鍵詞定義5、沒(méi)有靜態(tài)類(lèi)型,通過(guò)object定義單例類(lèi),main方法就是放在object類(lèi)型中。
Node.js、Scala、Clojure等聲稱(chēng)適合高并發(fā)的語(yǔ)言,分別具體適用于什么情景,何種任務(wù)
先說(shuō)一些共同點(diǎn):
都試圖利用成熟的JVM,并可以使用JVM平臺(tái)上現(xiàn)存的代碼和廣泛的庫(kù),同時(shí)避免Java語(yǔ)言表達(dá)上的一些弱點(diǎn)。兩者都試圖將函數(shù)編程(FP)引入到原本是為純OO語(yǔ)言Java定制的JVM上。因此,它們都具有FP的特征:函數(shù)是頭等公民,可以作為參數(shù)傳遞,可以作為返回值返回。但兩種語(yǔ)言的設(shè)計(jì)哲學(xué)截然不同:
Clojure是歷史悠久的Lisp的一種方言,它需要尊重Lisp的傳統(tǒng):包括臭名昭著(對(duì)Lisp愛(ài)好者是香味撲鼻)的括號(hào)海洋。當(dāng)然Clojure做了很多不同傳統(tǒng)Lisp的處理,如引入了Vector,map等基本類(lèi)型,而不只是List。而Scala是全新設(shè)計(jì)的語(yǔ)法,它不受過(guò)往語(yǔ)法的限制;它深受Haskell的影響,有抽象數(shù)據(jù)類(lèi)型ADT、模式匹配等鮮明特征。Scala是強(qiáng)類(lèi)型語(yǔ)言,編譯器積極檢查數(shù)據(jù)類(lèi)型,有類(lèi)型推斷等新類(lèi)型語(yǔ)言的先進(jìn)特征。Clojure是鴨子類(lèi)型語(yǔ)言,編譯器不檢查類(lèi)型,這責(zé)任在于程序員自己(目前core.typed庫(kù)試圖把強(qiáng)類(lèi)型檢查作為可選項(xiàng)加入到Clojure語(yǔ)言中,不過(guò)還遠(yuǎn)遠(yuǎn)不到成熟的地步)。Scala認(rèn)為OO和FP都是非常有效的表達(dá)方法,因此在語(yǔ)言中同時(shí)支持它們。Clojure則強(qiáng)烈不鼓勵(lì)使用OO編程,盡管從與Java互通等方面出發(fā)有一些支持。它強(qiáng)烈傾向于FP編程。帶來(lái)的后果是Scala的程序風(fēng)格可能會(huì)非常多樣,而Clojure則相對(duì)統(tǒng)一。Scala是傳統(tǒng)的語(yǔ)言開(kāi)發(fā)方式:有相當(dāng)多的關(guān)鍵字和語(yǔ)法糖,都需要核心開(kāi)發(fā)者支持。雖然加入了元編程能力,但其元編程與普通編程區(qū)別很大,難以被一般開(kāi)發(fā)者使用。Clojure從Lisp處繼承的代碼即數(shù)據(jù)的核心,則保證了極為自然和強(qiáng)大的元編程能力,任何開(kāi)發(fā)者都很容易用宏來(lái)定義自己的語(yǔ)法,因此基于Clojure定義自己的領(lǐng)域語(yǔ)言(DSL)非常容易。由于其多樣的語(yǔ)法特點(diǎn),多種語(yǔ)義的支持,Scala是一種相當(dāng)復(fù)雜的語(yǔ)言,其語(yǔ)法的數(shù)量比Java語(yǔ)言還要多,更不要說(shuō)其獨(dú)立于Java的自己的類(lèi)型系統(tǒng)。與之相對(duì),Clojure的內(nèi)核非常簡(jiǎn)單,語(yǔ)法極為簡(jiǎn)化。一個(gè)重要的后果是,Clojure成熟較快,編譯器本身容易開(kāi)發(fā),而Scala的編譯器開(kāi)發(fā)難度大得多。我本人是在評(píng)估了兩種語(yǔ)言的穩(wěn)定性后做出的選擇。兩種語(yǔ)言都是通用性的,因此是互相競(jìng)爭(zhēng)關(guān)系,都聲稱(chēng)自己適合全領(lǐng)域的編程。雖說(shuō)在具體的庫(kù)支持上可能互有長(zhǎng)短(比如Clojure的STM被認(rèn)為是更容易進(jìn)行并行編程,而akka這樣的actor庫(kù)可以讓Scala具有Erlang一般的能力),但這些很可能是臨時(shí)的。所以考慮到選擇一種新的語(yǔ)言,特別是如此有特點(diǎn)的兩種語(yǔ)言,需要做好顛覆三觀(guān)的準(zhǔn)備(特別是少接觸Lisp的大多數(shù)程序員),然后根據(jù)自己的喜好進(jìn)行選擇。
PS.有人提出Clojure的可讀性不好,這點(diǎn)我非常不同意。這很可能是熟悉程度弱所帶來(lái)的一種偏見(jiàn)。對(duì)于自己不熟悉的語(yǔ)法表達(dá)會(huì)有這種看法。實(shí)際上,由于Clojure的語(yǔ)法統(tǒng)一程度強(qiáng),一般來(lái)說(shuō)好的Clojure程序的一致性會(huì)更好。當(dāng)然,你也可以用它寫(xiě)出很爛的完全不可讀的程序,但哪種語(yǔ)言也無(wú)法避免這樣的可能吧?
PPS.FP與OO的編程邏輯截然不同,從OO為主轉(zhuǎn)為FP需要大的習(xí)慣轉(zhuǎn)變。但如果不進(jìn)行這種轉(zhuǎn)變,何必學(xué)習(xí)一種新的語(yǔ)言來(lái)表達(dá)呢?特別是Java8也已經(jīng)加入了相當(dāng)?shù)腇P支持,可以在OO為主的環(huán)境中加入FP的味道了。另外,Clojure并不是純粹的FP語(yǔ)言,從實(shí)用性的角度上它支持相當(dāng)多的可變性編程;更純粹的FP語(yǔ)言是Haskell,學(xué)院派(非愛(ài)好者的“不實(shí)用”的說(shuō)法)的語(yǔ)言。
關(guān)于scala的類(lèi)型推斷機(jī)制到此分享完畢,希望能幫助到您。
本文鏈接:http:///kaifa/8750.html