- Scala編程(第5版)
- (德)馬丁·奧德斯基等
- 1501字
- 2022-05-06 15:51:39
5.2 字面量
表5.1中列出的所有基礎類型都可以用字面量(literal)來書寫。字面量是在代碼中直接寫入常量值的一種方式。
Java程序員的快速通道
本節中展示的大部分字面量的用法與Java完全一致,如果你是Java高手,則可以安心地跳過本節的絕大部分內容。你需要讀一讀的是Scala原生字符串字面量(77頁開始)及字符串插值(79頁開始)。另外,Scala并不支持八進制字面量和以0開頭的整數字面量,如031將無法通過編譯[2]。
整數字面量
用于Int、Long、Short和Byte的整數字面量有兩種形式:十進制的和十六進制的。整數字面量的不同開頭表示了不同的進制。如果以0x或0X開頭,則意味著這是十六進制的數,可以包含0到9,以及大寫或小寫的A到F表示的數字。例如:

需要注意的是,Scala的shell總是以十進制打印整數值,無論你使用哪種形式來初始化。因此編譯器把用字面量0x00FF初始化的變量hex2顯示為十進制的255。(當然,不必盲目相信我們說的,感受Scala的好方法是一邊讀一邊在編譯器中嘗試這些語句。)如果字面量是以非0的數字開頭的,且除此之外沒有其他修飾,這個數就是十進制的。例如:

如果整數字面量以L或l結尾,它就是Long類型的,否則就是Int類型的。一些Long類型的整數字面量如下:

如果一個Int類型的字面量被賦值給一個類型為Short或Byte的變量,則該字面量會被當作Short或Byte類型,只要這個字面量的值在對應類型的合法取值區間即可。例如:

浮點數字面量
浮點數字面量由十進制的數字、可選的小數點(decimal point),以及后續一個可選的E或e開頭的指數(exponent)組成。一些浮點數字面量如下:

需要注意的是,指數部分指的是對前一部分乘以10的多少次方。例如,1.2345e1等于1.2345乘以10的1次方,即12.345。如果浮點數字面量以F或f結尾,它就是Float類型的;否則它就是Double類型的。Double類型的浮點數字面量也可以以D或d結尾,但這是可選的。一些Float字面量如下:

如果要以Double來表示最后這個浮點數值,則可以采用下面(或其他)的形式:

更大的數值字面量
Scala 3包含了一個實驗屬性的功能特性,可以消除數值字面量的大小限制,用來初始化任意一種(數值)類型。你可以通過如下的引入語句來開啟這個特性:

來自標準類庫的兩個示例如下:

字符字面量
字符字面量由一對單引號和中間的任意Unicode字符組成,例如:

除了顯式地給出原字符,也可以用字符的Unicode碼來表示。具體寫法是\u加上Unicode碼對應的4位的十六進制數字,例如:

事實上,這樣的Unicode字符可以出現在Scala程序的任何位置。比如,可以像這樣命名一個標識符(變量):

這個標識符的處理方法與BAD一樣,也就是將上述Unicode碼解開后的結果。通常來說,這樣的標識符命名方法并不好,因為不易讀。這樣的語法規則的存在,本意是讓包含非ASCII的Unicode字符的Scala源文件可以用ASCII表示。
最后,還有一些字符字面量是由特殊的轉義序列來表示的,如表5.2所示。例如:

表5.2 特殊的轉義序列

字符串字面量
字符串字面量由雙引號引起來的字符組成:

雙引號中字符的語法與字符字面量的一樣。比如:

由于這個語法對那些包含大量轉義序列或者跨多行的字符串而言比較別扭,因此Scala支持一種特殊的語法來表示原生字符串(raw string)。可以用3個雙引號(""")開始并用3個雙引號(""")結束來表示原生字符串。原生字符串內部可以包含任何字符,如換行符、單/雙引號和其他特殊字符。當然,連續3個雙引號的情況除外。例如,如下程序就是用原生字符串來打印一條消息:

不過,運行這段代碼并不會產生與我們想要的完全一致的輸出:

這里的問題是字符串第二行前面的空格被包含在了字符串里。為了處理這個常見的情況,可以對字符串調用stripMargin方法。具體做法是在每一行開始加一個管道符(|),然后對整個字符串調用stripMargin方法:

現在這段代碼滿足我們的要求了:

布爾值字面量
Boolean類型有兩個字面量,即true和false:

關于字面量的內容就這些。從“字面”上講[3],你已經是Scala的專家了。
- Practical Data Analysis Cookbook
- 基于粒計算模型的圖像處理
- VMware View Security Essentials
- Magento 2 Theme Design(Second Edition)
- Windows Server 2012 Unified Remote Access Planning and Deployment
- Reactive Android Programming
- Gradle for Android
- 51單片機C語言開發教程
- D3.js By Example
- R用戶Python學習指南:數據科學方法
- FPGA嵌入式項目開發實戰
- 軟件體系結構
- 大學計算機基礎實訓教程
- jQuery從入門到精通(微課精編版)
- HTML5程序開發范例寶典