當前位置:編程學習大全網 - 源碼下載 - IDEA中運行scala報錯

IDEA中運行scala報錯

Scala是壹門現代的多範式編程語言,誌在以簡練、優雅及類型安全的方式來表達常用編程模式。它平滑地集成了面向對象和函數語言的特性。Scala是面向對象的:Scala是壹個純面向對象語言,在某種意義上來講所有數值都是對象。對象的類型和行為是由class和trait來描述的。Class的抽象可由子類化和壹種靈活的基於mixin的組合機制(它可作為多重繼承的簡單替代方案)來擴展。Scala是函數式的:Scala還是壹個函數式語言,在某種意義上來講所有函數都是數值。Scala為定義匿名函數提供了壹種輕量級的語法,它支持高階(higher-order)函數、允許函數嵌套、支持局部套用(currying)。Scala的case類及其內置支持的模式匹配模型代數類型在許多函數式編程語言中都被使用。Scala是靜態類型的:Scala配備了壹套富有表現力的類型系統,該抽象概念以壹種安全的和壹致的方式被使用。Scala是可擴展的:Scala的設計承認了實踐事實,領域特定應用開發通常需要領域特定語言擴展。Scala提供了壹個獨特的語言組合機制,這可以更加容易地以類庫的形式增加新的語言結構:兩者結合使用可方便地定義新語句,無需擴展語法,也無需使用類似宏的元編程工具。任何方式可以被用作中綴(infix)或後綴(postfix)操作符閉包按照所期望的類型(目標類型)自動地被構造Scala可與Java和.NET進行互操作:Scala設計時就考慮了與流行編程環境良好交互,如Java2運行時環境(JRE)和.NET框架(CLR)。特別是與主流面向對象語言,如Java和C#盡量無縫交互。Scala有像Java和C#壹樣的編譯模型(獨立編譯,動態裝載類),允許訪問成千上萬的高質量類庫。對於某些開發者來說,這些刺激已足以引誘他們脫離Java進入Scala世界。但對另外壹些開發者來說,它們並沒有為Java世界裏當前正在演繹的日復壹日的編程活動提供好處。在壹篇名為“Scala:集Ruby和Java之所長”的博文中,Ian講述了或許不應在Java和Scala之間做出選擇,相反,相對於選擇其它語言如Ruby,選擇使用Java和Scala的混合物是的另壹種選擇:許多開發者熱愛Ruby,不過他們不能從中獲取足夠的東西。它可能是最具侵略性的語言之壹,因為Java才是第壹個到場的。人們總是引證Ruby的靈活而可擴展的語法、閉包等特性,以及其代碼如何簡明和具有表現力。例如,妳可以用壹個簡單語法創建壹個Map(Ruby稱之為“hashes”,盡管hashtable只是map壹種可能的實現方式),如:numberMap={"one"=>1,"two"=>2,"three"=>3}Java與之對等的語句顯得頗為冗長:MapnumberMap=newHashMap();numberMap.put("one",1);numberMap.put("two",2);numberMap.put("three",3);那麽Scala怎麽樣呢?讓我們看看Scala中map的例子:varnumberMap=Map("one"->1,"two"->2,"three"->3)妳會註意到它看上去非常類似等價的Ruby代碼,但是這兒有壹些重要區別。特別是,就像Java,Scala編譯器知道numberMap使用String作為鍵,Integer作為值。與Java不同的是,妳無需告知,它本身就能領會這壹點!這稱為“類型推理(typeinference)”。這意味著如果妳試圖給numberMap增加壹個新的鍵值對,但是要使用Integer作為鍵,String作為值,Scala將在妳試圖編譯它時立刻報錯(或者妳的IDE將立刻警告妳)。使用Ruby,只有當妳運行妳的軟件並試圖從該Map中找回該鍵和值時,得到的分別是Integer和String而不是所期望的String和Integer,這時才會導致報錯。過分強調編譯時類型檢查節省多少多少時間是困難的,但它消除了所有類在執行時將會產生的bug。Scala給妳帶來了這壹好處,而且代碼並不繁瑣。為更進壹步在壹個小例子中展現代碼量的縮減,TedNeward研究了開發同壹個類,用Java、C#、VirualBasic、Ruby和Scala的區別。請參考其博文Scalapt2:簡短。Ian繼續指出:Scala還有壹連串其它好的Ruby特性(Java所缺乏的),包括閉包,以及非常適合“領域特定語言”的可塑性語法。它擁有所有這些特性,而且結合了靜態類型好處。DavidMacIver在其博文說正經的,為什麽選擇Scala?中分享了他對於面向對象編程、面向模塊編程、靜態類型、函數編程以及該語言中他所喜歡的未言明特性的觀點。他補充道:Scala離完美還差得遠。它有壹些語法缺陷,壹些由Java帶來的問題,壹個有適度問題的編譯器以及壹堆妳記不住的瑣碎特性和邊界情況(edgecase)。然而,我發現這些問題除了煩妳之外並不真正產生什麽後果。如果只是想坐下來書寫好的代碼,該語言的核心是強大的和非常有用的。為了提供壹個均衡的觀點,David在其博文中接著探討了為什麽不選Scala,文中他闡述了壹些邊界情況(edgecase)。作為總結,David有如下評論:總而言之,我發現這些只是增加了壹些煩心事。它仍是我最喜歡的JVM語言,但是妳的看法將取決於妳怎樣擱置那些對妳來說可能是更重要的需要優先考慮的事情。為了展現Scala是壹門不斷成熟的語言,ProgramminginScala壹書很快將會出版。如果等不及,Artima網站上有該書PDF格式的預印版。

  • 上一篇:蹭網神器BT8 怎麽用
  • 下一篇:轉生粘液分級過山車,怎麽回事?
  • copyright 2024編程學習大全網