日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala入门指南

發(fā)布時(shí)間:2025/3/19 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala入门指南 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Scala解釋器

啟動(dòng)Scala解釋器的步驟如下:

●安裝Scala

●確保scala/bin目錄位于系統(tǒng)PATH中。

●在你的操作系統(tǒng)中打開命令行窗口。

●鍵入scala并按Enter鍵。

提示:不喜歡命令行?你也可以通過其他方式運(yùn)行Scala解釋器,參見 http://horstmann.com/scala/install

現(xiàn)在,鍵入命令,然后按Enter鍵。每一次,解釋器都會(huì)顯示出結(jié)果。例如,當(dāng)你鍵入“8 * 5 + 2”(如下面加粗的文字),將得到42

scala> 8 * 5 + 2

res0: Int = 42

答案被命名為res0,你可以在后續(xù)操作中使用這個(gè)名稱:

scala> 0.5 * res0

res1: Double = 21.0

scala> "Hello," + res0

res2: java.lang.String = Hello, 42

正如你所看到的,解釋器同時(shí)還會(huì)顯示結(jié)果的類型——拿本例來說就是IntDoublejava.lang.String

你可以調(diào)用方法。根據(jù)啟動(dòng)解釋器的方式的不同,你可能可以使用Tab鍵補(bǔ)全而不用完整地手工鍵入方法名。你可以試著鍵入res2.to,然后按Tab鍵,如果解釋器給出了如下選項(xiàng):

toCharArray toLowerCase toString toUpperCase

說明Tab鍵補(bǔ)全功能是好的。接下來鍵入U并再次按Tab鍵,你應(yīng)該就能定位到單條補(bǔ)全如下:

res2.toUpperCase

按下Enter鍵,結(jié)果就會(huì)被顯示出來。(如果在你的環(huán)境中無法使用Tab鍵補(bǔ)全,那你就只好自行鍵入完整的方法名了。)

同樣地,可以試試按方向鍵。在大多數(shù)實(shí)現(xiàn)當(dāng)中,你將看到之前提交過的命令,并且可以進(jìn)行編輯。用Del鍵將上一條命令修改為:

res2.toLowerCase

正如你所看到的,Scala解釋器讀到一個(gè)表達(dá)式,對(duì)它進(jìn)行求值,將它打印出來,接著再繼續(xù)讀下一個(gè)表達(dá)式。這個(gè)過程被稱做讀取-求值-打印-循環(huán),即REPL

從技術(shù)上講,scala程序并不是一個(gè)解釋器。實(shí)際發(fā)生的是,你輸入的內(nèi)容被快速地編譯成字節(jié)碼,然后這段字節(jié)碼交由Java虛擬機(jī)執(zhí)行。正因如此,大多數(shù)Scala程序員更傾向于將它稱做“REPL”。

提示:REPL是你的朋友。即時(shí)反饋鼓勵(lì)我們嘗試新的東西;而且,如果它跑出你想要的效果,你會(huì)很有成就感。

同時(shí),打開一個(gè)編輯器窗口也是個(gè)不錯(cuò)的主意,這樣你就可以將成功運(yùn)行的代碼片段復(fù)制、粘貼出來供今后使用。同樣地,當(dāng)你嘗試更復(fù)雜的示例時(shí),你也許會(huì)想要在編輯器中組織好以后再貼到REPL

聲明值和變量

除了直接使用res0res1等這些名稱之外,你也可以定義自己的名稱:

scala> val answer = 8 * 5 + 2

answer: Int = 42

你可以在后續(xù)表達(dá)式中使用這些名稱:

scala> 0.5 * answer

res3: Double = 21.0

val定義的值實(shí)際上是一個(gè)常量——你無法改變它的內(nèi)容:

scala> answer = 0

<console>:6: error: reassignment to val

如果要聲明其值可變的變量,可以用var

var counter = 0

counter = 1 // OK,我們可以改變一個(gè)var

Scala中,我們鼓勵(lì)你使用val——除非你真的需要改變它的內(nèi)容。JavaC++程序員也許會(huì)感到有些意外的是,大多數(shù)程序并不需要那么多var變量。

注意,你不需要給出值或者變量的類型,這個(gè)信息可以從你用來初始化它的表達(dá)式推斷出來。(聲明值或變量但不做初始化會(huì)報(bào)錯(cuò)。)

不過,在必要的時(shí)候,你也可以指定類型。例如:

val greeting: String = null

val greeting: Any = "Hello"

說明:在Scala中,變量或函數(shù)的類型總是寫在變量或函數(shù)名稱的后面。這使得我們更容易閱讀那些復(fù)雜類型的聲明。

當(dāng)我在ScalaJava之間來回切換的時(shí)候,我發(fā)現(xiàn)我經(jīng)常無意識(shí)地敲出Java方式的聲明,比如String greeting,需要手工改成greeting: String。這有些煩人,但每當(dāng)我面對(duì)復(fù)雜的Scala程序時(shí),我都會(huì)心存感激,因?yàn)槲也恍枰偃ソ庾x那些C風(fēng)格的類型聲明。

說明:你可能已經(jīng)注意到,在變量聲明或賦值語句之后,我們并沒有使用分號(hào)。在Scala中,僅當(dāng)同一行代碼中存在多條語句時(shí)才需要用分號(hào)隔開。

你可以將多個(gè)值或變量放在一起聲明:

val xmax, ymax = 100 // xmaxymax設(shè)為100

var greeting, message: String = null

// greetingmessage都是字符串,被初始化為null

常用類型

到目前為止你已經(jīng)看到過Scala數(shù)據(jù)類型中的一些,比如IntDouble。和Java一樣,Scala也有7種數(shù)值類型:ByteCharShortIntLongFloatDouble,以及1個(gè)Boolean類型。跟Java不同的是,這些類型是類。Scala并不刻意區(qū)分基本類型和引用類型。你可以對(duì)數(shù)字執(zhí)行方法,例如:

1.toString() // 產(chǎn)出字符串"1"

或者,更有意思的是,你可以:

1.to(10) // 產(chǎn)出Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

(我們將在第13章介紹Range類,現(xiàn)在你只需要把它當(dāng)做一組數(shù)字就好。)

Scala中,我們不需要包裝類型。在基本類型和包裝類型之間的轉(zhuǎn)換是Scala編譯器的工作。舉例來說,如果你創(chuàng)建一個(gè)Int的數(shù)組,最終在虛擬機(jī)中得到的是一個(gè)int[]數(shù)組。

正如你在1.1節(jié)中看到的那樣,Scala用底層的java.lang.String類來表示字符串。不過,它通過StringOps類給字符串追加了上百種操作。

舉例來說,intersect方法輸出兩個(gè)字符串共通的一組字符:

"Hello".intersect("World") // 輸出"lo"

在這個(gè)表達(dá)式中,java.lang.String對(duì)象"Hello"被隱式地轉(zhuǎn)換成了一個(gè)StringOps對(duì)象,接著StringOps類的intersect方法被應(yīng)用。

因此,在使用Scala文檔的時(shí)候,記得要看一下StringOps類。

同樣地,Scala還提供了RichIntRichDoubleRichChar等。它們分別提供了它們可憐的堂兄弟們——IntDoubleChar等——所不具備的便捷方法。我們前面用到的to方法事實(shí)上就是RichInt類中的方法。在表達(dá)式

1.to(10)

中,Int1首先被轉(zhuǎn)換成RichInt,然后再應(yīng)用to方法。

最后,還有BigIntBigDecimal類,用于任意大小(但有窮)的數(shù)字。這些類背后分別對(duì)應(yīng)的是java.math.BigIntegerjava.math.BigDecimal,不過,在1.4節(jié)你會(huì)看到,它們用起來更加方便,你可以用常規(guī)的數(shù)學(xué)操作符來操作它們。

說明:在Scala中,我們用方法,而不是強(qiáng)制類型轉(zhuǎn)換,來做數(shù)值類型之間的轉(zhuǎn)換。舉例來說,99.44.toInt得到9999.toChar得到'c'。當(dāng)然,和Java一樣,toString將任意的對(duì)象轉(zhuǎn)換成字符串。

要將包含了數(shù)字的字符串轉(zhuǎn)換成數(shù)值,使用toInttoDouble。例如,"99.44".toDouble得到99.44

?

本文節(jié)選自《快學(xué)Scala

電子工業(yè)出版社出版

(美)霍斯曼(Horstmann,C.S.)著

高宇翔譯

轉(zhuǎn)載于:https://blog.51cto.com/bvbroadview/1040574

總結(jié)

以上是生活随笔為你收集整理的Scala入门指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。