- Scala編程實戰(原書第2版)
- (美)阿爾文·亞歷山大
- 1058字
- 2024-04-15 12:05:15
2.4 字符串的變量代入
問題
你想在一個字符串中使用變量替換,就像使用Perl、PHP和Ruby時一樣。
解決方案
要在Scala中使用基本的字符串插值,需要在字符串前加上字母s,并在字符串中包含需要替換的變量,變量名稱前面需要加上字符$,參照下面的println語句:

根據Scala官方的字符串插值文檔(https://oreil.ly/A3hqn),當在字符串前面加上字母s時,就是在創建一個經過處理的字符串字面量。這個例子使用了“ s字符串插值器”,它可以讓你在字符串中嵌入變量,這些變量將被它們的值取代。
在字符串字面量中使用表達式
除了把簡單的變量放在字符串中,還可以將表達式放在字符串的大括號里,在下面的例子中,會把age加1后的結果放到字符串中:

下面這個例子展示了在大括號中使用相等判斷:

在輸出對象字段時也需要使用大括號:

注意,如果輸出對象字段時不使用大括號,輸出的信息會與預期不符:

討論
放在字符串前面的s實際上是一個方法。雖然這似乎比直接把變量放在字符串里不那么方便,但這么做至少有兩個好處:
·Scala提供了其他插值函數,這讓你有更多的掌控力。
·任何人都可以定義自己的字符串插值函數。例如,Scala的SQL庫就利用了這種能力,可以寫出像sql"SELECT * FROM USERS"的查詢。
我們來看看另外兩個Scala內置的插值函數。
f字符串插值器(printf風格的格式化)
在前面解決方案的例子中,weight的值輸出為200.0。這完全正確,但如果想多輸出幾位小數,或者完全刪除它們,該怎么做呢?
這個簡單的需求催生了“f字符串插值器”,一個可以通過printf格式化內部字符串的方法。接下來的例子會說明如何輸出保留兩位小數的weight:


還會說明如何打印不保留小數的weight:

如上所述,要使用這種方法,只需要做到如下兩步:
·在字符串前加f。
·在變量后使用printf風格的格式化指定符。
printf格式化指定符
最常用的printf格式化指定符會在2.5節中列舉。
雖然這些例子使用了println方法,但需要注意的是,完全可以將變量替換的結果賦給一個新的變量,類似于在其他語言中使用sprintf:

現在s只是一個普通的字符串,可以用在任何需要字符串的地方。
raw插值器
除了s和f字符串插值器之外,Scala還包含另一個叫作raw的插值器。使用raw插值器不會對字符串里的任何轉義字符進行轉義。下面這個例子是對raw與s插值器進行比較:

如上所示,s會對\n轉義成換行符,而raw不對其做任何轉義,只是將其當作普通字符處理。
創建自定義插值器
除了s、f和raw插值器,還可以定義自己的插值器。2.11節將給出創建自定義插值器的例子。
另見
·2.5節將列舉許多常用的字符串格式化的字符。
·Oracle Formatter類文檔(https://oreil.ly/gEAsi)有一個完整的、可以使用的格式化字符的列表。
·Scala官方字符串插值頁面(https://oreil.ly/A3hqn)有更多關于插值器的細節。
·2.11節將給出創建自定義插值器的例子。
- Instant Testing with CasperJS
- 精通JavaScript+jQuery:100%動態網頁設計密碼
- 新一代通用視頻編碼H.266/VVC:原理、標準與實現
- Learning Linux Binary Analysis
- CouchDB and PHP Web Development Beginner’s Guide
- PLC應用技術(三菱FX2N系列)
- ArcGIS for Desktop Cookbook
- 零代碼實戰:企業級應用搭建與案例詳解
- 創意UI Photoshop玩轉移動UI設計
- Oracle Data Guard 11gR2 Administration Beginner's Guide
- Delphi開發典型模塊大全(修訂版)
- Anaconda數據科學實戰
- Test-Driven iOS Development with Swift
- Mastering PostgreSQL 11(Second Edition)
- 編程改變生活:用PySide6/PyQt6創建GUI程序(進階篇·微課視頻版)