整數(shù)常量可以用十進(jìn)制,十六進(jìn)制或八進(jìn)制表示。
詳細(xì)總結(jié)在下表中。
類型 | 格式 | 例子 |
---|---|---|
Decimal | 0或非零數(shù)字后跟零或多個(gè)數(shù)字(0-9) | 0, 1, 321 |
Hexadecimal | 0x后跟一個(gè)或多個(gè)十六進(jìn)制數(shù)字(0-9,A-F,a-f) | 0xFF, 0x1a3b |
Octal | 0后跟一個(gè)或多個(gè)八進(jìn)制數(shù)字(0-7)a | 013, 077 |
截至Scala 2.10,一個(gè)八進(jìn)制常量已被棄用。
您可以通過(guò)在常量前添加一個(gè) -
號(hào)來(lái)表示負(fù)數(shù)。
對(duì)于長(zhǎng)文本,需要在文本末尾附加L
或l
字符,除非將值分配給聲明為L(zhǎng)ong的變量。
否則,推斷Int。
整數(shù)字符串的有效值受要為其分配值的變量的類型的限制。
下表定義了包含的限制。
目標(biāo)類型 | 最低(含) | 最大(包括) |
---|---|---|
Long | -263 | 263 |
Int | -231 | 231 - 1 |
Short | -215 | 215 |
Char | 0 | 216 |
Byte | -27 | 27 - 1 |
如果指定的整數(shù)常量數(shù)超出這些范圍,則會(huì)發(fā)生編譯時(shí)錯(cuò)誤。
浮點(diǎn)常量是帶有可選減號(hào),零個(gè)或多個(gè)數(shù)字,后跟句點(diǎn).
,后跟一個(gè)或多個(gè)數(shù)字的表達(dá)式。
對(duì)于 Float
常量,在文字末尾附加F
或f
字符。否則,假定為Double。
我們可以選擇為D加上D
或 d
。
浮點(diǎn)常量可以用或不用指數(shù)表示。
指數(shù)部分的格式為e或E,后跟可選的+或 - ,后跟一個(gè)或多個(gè)數(shù)字。
這里有一些浮點(diǎn)常量的例子。 Double被推斷除非聲明的變量是Float或使用f或F后綴:
.14 3.14 3.14f 3.14F 3.14d 3.14D 3e5 3E5 3.14e+5 3.14e-5 3.14e-5 3.14e-5f 3.14e-5F 3.14e-5d 3.14e-5D
布爾常量是true
和false
。
它們被分配到的變量的類型將被推斷為布爾值:
object Main { def main(args: Array[String]) { val b1 = true val b2 = false println(b1); println(b2); } }
Unicode值介于0和255之間的字符可以由八進(jìn)制轉(zhuǎn)義表示,即反斜杠(\)后跟最多三個(gè)八進(jìn)制字符的序列。
這里有些例子:
"A" "\u0041" // "A" in Unicode "\n" "\012" // "\n" in octal "\t"
有效的轉(zhuǎn)義序列如下表所示。
序列 | 含義 |
---|---|
\b | 退格(BS) |
\t | 水平制表(HT) |
\n | 換行(LT) |
\f | 換頁(yè)(FF) |
\r | 回車(CR)... |
\" | 雙引號(hào)(“) |
\" | 單引號(hào)(“) |
\\ | 反斜杠(\) |
字符串常量是用雙引號(hào)或三重雙引號(hào)括起來(lái)的字符序列,即“”“...”“”。
對(duì)于雙引號(hào)中的字符串字符,允許的字符與字符常量相同。
要在字符串中包含雙引號(hào)“
字符,必須使用\
字符“轉(zhuǎn)義"。
這里有些例子:
"This is a\ntest" "He said, \"SQL is for database!\"" "First\tSecond"
由雙引號(hào)的三元組界定的字符串常量稱為多行字符串常量。
這些字符串可以覆蓋幾行。換行符將是字符串的一部分。它們可以包括任何字符,包括一個(gè)或兩個(gè)雙引號(hào)在一起,但不能三個(gè)在一起。
它們對(duì)于不具有有效Unicode或轉(zhuǎn)義序列的\字符的字符串非常有用。
這里有三個(gè)示例字符串:
"""This is a \ntest""" """He said, "SQL is for database!" """ """First line\n Second line\t Fourth line"""
在代碼中使用多行字符串時(shí),要使用String.stripMargin縮進(jìn)子字符串以進(jìn)行正確的代碼格式化。
它刪除子字符串中的所有空格,直到并包括垂直條|
的第一次出現(xiàn)。
要添加空格縮進(jìn),請(qǐng)將空格放在|
后面。
考慮這個(gè)例子:
object Main { def main(args: Array[String]) { println(hello("This is a test") ); } def hello(name: String) = s"""Welcome! Hello, $name! * (Star!!) |Hi. | whitespace.""" .stripMargin }
要使用不同于|
的前導(dǎo)字符,請(qǐng)使用帶有Char(字符)參數(shù)的stripMargin的重載版本。
如果整個(gè)字符串都有要?jiǎng)h除的前綴或后綴,則有相應(yīng)的前綴和stripSuffix方法。
object Main { def main(args: Array[String]) { println(goodbye("o2fo.com")); } def goodbye(name: String) = s"""xxxGoodbye, ${name}yyy xxxCome again!yyy""" .stripPrefix("xxx").stripSuffix("yyy") }
Scala有符號(hào)類型,它們是內(nèi)部連接的字符串,意味著具有相同“名稱”的兩個(gè)符號(hào)實(shí)際上是指內(nèi)存中的同一個(gè)對(duì)象。
符號(hào)常量是單引號(hào)'
,后跟一個(gè)或多個(gè)數(shù)字,字母或下劃線(“_”),但第一個(gè)字符不能是數(shù)字。
(i:Int,s:String)=>
s + i 是Function2類型的函數(shù)文本[Int,String,String](返回String)。
你甚至可以使用常量語(yǔ)法作為類型聲明。
以下聲明是等效的:
val f1: (Int,String) => String = (i, s) => s+i val f2: Function2[Int,String,String] = (i, s) => s+i
Scala庫(kù)包括用于將N個(gè)項(xiàng)分組的TupleN類(例如,Tuple2),以及括號(hào)內(nèi)的項(xiàng)的逗號(hào)分隔列表的文字語(yǔ)法。
對(duì)于1到22之間的N,有單獨(dú)的TupleN類。
例如,val tup =(“Hi”,2014)定義了一個(gè)Tuple2實(shí)例,其中第一個(gè)元素推斷String,第二個(gè)元素Int推斷。
Tuple實(shí)例是不可變的,第一類值,因此您可以將它們分配給變量,將它們作為值傳遞,并從方法中返回。
我們還可以使用常量語(yǔ)法為Tuple類型聲明:
val t1: (Int,String) = (1, "two") val t2: Tuple2[Int,String] = (1, "two")
以下示例演示使用元組:
object Main { def main(args: Array[String]) { val t = ("Hello", 1, 2.3) println( "Print the whole tuple: " + t ) println( "Print the first item: " + t._1 ) println( "Print the second item: " + t._2 ) println( "Print the third item: " + t._3 ) val (t1, t2, t3) = ("World", "!", 0x22) println( t1 + ", " + t2 + ", " + t3 ) val (t4, t5, t6) = Tuple3("World", "!", 0x22) println( t4 + ", " + t5 + ", " + t6 ) } }
表達(dá)式t._n從元組t中檢索第n個(gè)項(xiàng),從一個(gè)開始,不是零,遵循歷史約定。
有幾種方法來(lái)定義兩元素元組,有時(shí)稱為一對(duì)。
我們可以在兩個(gè)值之間使用“箭頭運(yùn)算符”,以及在元組相關(guān)類上使用特殊的工廠方法:
(1, "one") 1 -> "one" Tuple2(1, "one")
更多建議: