官术网_书友最值得收藏!

5.3 字符串插值

Scala包括了一個靈活的機(jī)制來支持字符串插值,允許在字符串字面量中嵌入表達(dá)式。最常見的用途是為字符串拼接提供一個更精簡和易讀的替代方案。舉個例子:

表達(dá)式s"Hello, $name!"是一個被處理的processed)字符串字面量。由于字母s出現(xiàn)在首個雙引號前,Scala將使用s這個字符串插值器來處理該字面量。s字符串插值器會對內(nèi)嵌的每個表達(dá)式求值,對求值結(jié)果調(diào)用toString方法,替換掉字面量中的那些表達(dá)式。因此,s"Hello, $name!"會交出"Hello, reader!",與"Hello, " + name + "!"的結(jié)果一樣。

在被處理的字符串字面量中,可以隨時用美元符號($)開始一個表達(dá)式。對于那些單變量的表達(dá)式,通常可以在美元符號后面直接給出變量的名稱。Scala將從美元符號開始到首個非標(biāo)識符字符的部分作為表達(dá)式。如果表達(dá)式包含了非標(biāo)識符字符,就必須將它放在花括號中,左花括號需要緊跟美元符號。例如:

Scala默認(rèn)還提供了兩種字符串插值器:rawfraw字符串插值器的行為與s字符串插值器的類似,不過它并不識別字符轉(zhuǎn)義序列(比如,表5.2給出的那些)。舉例來說,如下語句將打印出4個反斜杠,而不是2個反斜杠:

f字符串插值器允許給內(nèi)嵌的表達(dá)式加上printf風(fēng)格的指令。你需要將指令放在表達(dá)式之后,以百分號(%)開始,使用java.util.Formatter中給出的語法。比如,可以這樣來格式化π:

如果不對內(nèi)嵌表達(dá)式給出任何格式化指令,則f字符串插值器將默認(rèn)使用%s,其含義是用toString方法的值來替換,就像s字符串插值器那樣。例如:

在Scala中,字符串插值是通過在編譯期重寫代碼來實(shí)現(xiàn)的。編譯器會將任何由某個標(biāo)識符緊接著字符串字面量的(左)雙引號這樣的表達(dá)式當(dāng)作字符串插值器表達(dá)式處理。我們在前面看到的字符串插值器sfraw,就是通過這個通用的機(jī)制實(shí)現(xiàn)的。類庫作者和用戶可以定義其他字符串插值器來滿足不同的用途。

主站蜘蛛池模板: 时尚| 抚顺县| 万荣县| 夏邑县| 西林县| 遂昌县| 宿迁市| 通化县| 太谷县| 彩票| 廊坊市| 乡城县| 开封县| 长丰县| 灯塔市| 千阳县| 德州市| 靖宇县| 平凉市| 胶州市| 灵石县| 荣昌县| 讷河市| 师宗县| 徐汇区| 河间市| 祥云县| 武乡县| 鹤壁市| 安龙县| 浙江省| 蒙山县| 色达县| 枣强县| 林甸县| 涟水县| 天台县| 鹤壁市| 辉县市| 冷水江市| 巴青县|