书名:Scala 学习手册/(美)Swartz,J. 著;苏金国等译。–北京:中国电力出版社,2016.2
第1章 概述
- 输出:
println("hello world!")
,String
字符为双引号,Char
字符为单引号 - REPL:Read,Evaluate,Print,Loop.可以跨会话存储
- up 箭头:上一行命令
- 每一行的输出
result
REPL 会用一个常量变量保存:res0,res1,...
- 运行
scala
文件hello.scala
- 交互环境中输入
scala> :load hello.scala
- 命令行:
scala hello.scala
- 交互环境中输入
- 退出:
:q
第2章 数据类型(数值类型:Int,Double
,非数值类型:String,Char
)
- 字面量值(不可重新赋值):
scala> val x:Int=10
,不可变有类型的存储文件,用关键字val
(value),类型可省略scala> val x = 10
- 变量:
scala> var a:Double=2.73
,关键字var
(variable),类型可省略scala> var a=2.73
- 字符串
val approx = 355/113f println("Pi,using 355/113,is about "+approx+".") println(s"Pi,using 355/113,is about $approx.") //内插法
- 字符串内插(替代格式
printf
,难读,输出可格式化)val item = "apple" println(s"How do you like them ${item}s?") println(s"Fish n chips n ,${"pepper "*3}salt") // 字符串乘法 println(f"I wrote a new $item%.3s today") println(f"Pi,using 355/113,is about ${355/113.0}%.5f.") //内插法
- 正则表达式
"Froggy went a' courting" matches ".* courting" //Ture or False "milk,tea,muck" replaceAll ("m[^ ]+k","coffee") "milk,tea,muck" replaceAll ("m[^ ].k","coffee") "milk,tea,muck" replaceFirst ("m[^ ]+k","coffee") "milk,tea,muck" replaceFirst ("m[^ ].k","coffee") // 捕获组:小括号定义,输入至少包括一个匹配值 val input = "Enjoy this apple 3.14159 times today" val pattern = """.* apple ([\d.]+) times .*""".r // r 为字符串操作符 val pattern(amountText) = input val amount = amountText.toDouble
- 类型操作(每个类型都属于一个对象)
scala> 5.asInstanceOf[Double]
:val/var 类型转换(尽量用第五条)scala> nada.getClass
:val/var 查看类型- val/var 类型确认:
scala> nada.isInstanceOf[Unit]
- val/var 散列码:
scala> "A".hashCode
- val/var 转换函数:
toString/toByte/toFloat/...
- 元组:包含两个以上值得有序容器,值类型可不同,不可迭代但可通过下标访问。类似关系型数据库中得一行
// 元组,下标从1开始 val info = (5,"Korben",true) val name = info._2 val red = "red"->"0xff0000" // 利用关系操作符创建2元组 val reversed = red._2 -> red._1
注:
1. 值优先于变量,因为值可以为代码带来稳定性和可预测性。
2. 类型为Double 的变量可以赋 Int 值,因为Int数可以自动转换为Double 数。
3. 变量命名建议:`camel case`驼峰命名
4. 字符串支持三重双引号
5. Scala 不支持其他类型到Boolean 的自动转换,非Null 字符不会计算为True,0也不等于False
6. &&与||很懒,第一个参数可以出结论,不在计算第二个参数。&与| 会对两个参数都做检查
7. Unit 字面量:`scala> val nada=()`,通常用来定义函数和表达式
第3章 表达式 和 条件式
表达式
-
表达式:
scala> val x=5*20;val amount = x+10
,字面量val/var 也是一种表达式 -
表达式块:
scala> val amount = {val x=5*20;x+10}
块中最后一个表达式最为块得返回值。- 表达式块分号,可用换行替代
- 表达式块可以嵌套
scala> {val a=1;{val b=a*2;{val c=b+4;c}}}
</