由於拷貝後文檔格式有變, 僅摘幾段如下. 完整而且代碼帶語法高亮的源版在: "program in chinese/Programming_in_Scala_study_notes_zh" 前言: 本書已有中文版, 此筆記並不是對原教程的翻譯, 而是圍繞示例進行選摘, 並順便將所有示例改成中文命名( ...
由於拷貝後文檔格式有變, 僅摘幾段如下. 完整而且代碼帶語法高亮的源版在: program-in-chinese/Programming_in_Scala_study_notes_zh
前言: 本書已有中文版, 此筆記並不是對原教程的翻譯, 而是圍繞示例進行選摘, 並順便將所有示例改成中文命名(不拘泥於原本命名用詞, 而是融入中文特色).
本文代碼在Scala 2.12.4, Java 1.8.0_45下測試通過
第一章 普適的語言
1.1
var 首都 = Map("中國" -> "北京", "俄羅斯" -> "莫斯科")
首都 += ("德國" -> "柏林")
println(首都("俄羅斯"))
(待續. 先從第二章開始)
第二章略
第三章
[略大部]
第十步 使用集合(Set)和映射(Map)
(這裡開始僅包含常式與極簡說明, 如有空再補詳細說明) 不可變集合
var 客機廠商 = Set("空客", "波音")
客機廠商 += "商飛"
println(客機廠商.contains("大疆"))
可變集合
import scala.collection.mutable
val 電影 = mutable.Set("舌尖一", "舌尖二")
電影 += "舌尖三"
println(電影)
如需指定使用HashSet, 就import scala.collection.immutable.HashSet
可變映射
import scala.collection.mutable
val 尋寶指南 = mutable.Map[Int, String]()
尋寶指南 += (1 -> "上荒島")
尋寶指南 += (2 -> "在地上找個那啥")
尋寶指南 += (3 -> "開挖")
println(尋寶指南(2))
不變映射
val 中文數字 = Map(1 -> "一", 2 -> "二", 3 -> "三", 4 -> "四", 5 -> "五")
println(中文數字(4))
第十二步 從文件讀行
[部分略]
如想輸出更漂亮, 下麵是最終版:
import scala.io.Source
def 字元數寬度(文本: String) = 文本.length.toString.length
if (args.length > 0) {
val 行 = Source.fromFile(args(0)).getLines().toList
val 最長行 = 行.reduceLeft(
(行1, 行2) => if (行1.length > 行2.length) 行1 else 行2
)
val 最大寬度 = 字元數寬度(最長行)
for (某行 <- 行) {
val 空格數 = 最大寬度 - 字元數寬度(某行)
val 縮進 = " " * 空格數
println(縮進 + 某行.length + " | " + 某行)
}
}
else
Console.err.println("請輸入文件名")
運行scala 統計字元2.scala 統計字元2.scala
輸出如下:
22 | import scala.io.Source
0 |
49 | def 字元數寬度(文本: String) = 文本.length.toString.length
0 |
22 | if (args.length > 0) {
52 | val 行 = Source.fromFile(args(0)).getLines().toList
25 | val 最長行 = 行.reduceLeft(
53 | (行1, 行2) => if (行1.length > 行2.length) 行1 else 行2
3 | )
23 | val 最大寬度 = 字元數寬度(最長行)
17 | for (某行 <- 行) {
30 | val 空格數 = 最大寬度 - 字元數寬度(某行)
22 | val 縮進 = " " * 空格數
40 | println(縮進 + 某行.length + " | " + 某行)
3 | }
1 | }
4 | else
31 | Console.err.println("請輸入文件名")
(第三章完)
發現的中文相關問題
命令行交互環境中, 錯誤信息對中文字元的定位不准. 這很干擾排錯. 比較如下兩個同樣出錯信息:
scala> println(["2"])
<console>:1: error: illegal start of simple expression
println(["2"])
^
scala> 列印參數(["2"])
<console>:1: error: illegal start of simple expression
列印參數(["2"])
^