Scala 學習一:基礎
Scala 解釋器具有補全功能
Scala 中不需要給出值或變量的類型,類型會從給出的初始表達式推斷出來
Scala 在一條語句後不需要使用分號,僅當週一行代碼中存在多條- 語句時才需要使用分號
Scala 中 byte, char, short, int, long, float, double 7種基本類型是類,所以可以直接調用方法.
Scala 中的字符串是用JavaString 實現的, Scala提供了更多的便捷方法
Scala 中使用方法,而不是強制類型轉換,來現實數值之間的轉換
Scala 中的 一般 操作符和Java中的作用是一樣的,不同的是他們是方法 a + b 等價於 a.+(b)。但是 Scala 中沒有 ++, – 操作符
Scala 中使用 “Scala.” 開頭的包名時, 可以省去Scala.
Scala 中導入包中所有類的語句是
import aa.bb._ //導入某個包下所有類
import aa.bb.{A,B} //導入包下多個類
Java是
import aa.bb.*; //注意:分號是不能少的
import aa.bb.A;
import aa.bb.B;
Scala 中沒有靜態方法,但是有單例對象. Java中有靜態方法 static
Scala 調用apply方法不需要顯式聲名, 可以理解爲將apply方法當作是 “()” 操作符的重載.
"Hello"(4) //結果爲 "o" 就等於 "Hello".apply(4)
val list = List(1,2) //就是調用了 List.apply[A](xs:A*) 方法
在Java中爲了區分邏輯結構 或 功能可以用 {} 包住一系列Java語句. 而Scala{}塊包含一系列表達式, 其結果也是一個表達式. 塊語句最後一句表達式的值就是該塊的值。這個特性對於某個val初始化需要多步完成的情況很有用.
Scala中的賦值語句返回值是Unit 即 (),爲了避免出錯,不要使用:
x = y = 1
// 語句可以正常運行,但沒有意義.
var a = ()
var b = 0
a = b = 1
println(a)
println(b)
- 懶值
當val被聲明爲lazy時,初始化就會推遲, 值到首次對它取值。
println("------- lazy val [result]")
lazy val words = scala.io.Source.fromFile("/Users/xxxx/words.txt").mkString
// println(" words = " + words) ## 註釋掉此句,words.txt 不存在,也不會報錯
爲了方便證明,把文件路徑寫錯,不訪問words,不出錯,直到首次訪問words。
懶值並不是沒有開銷,每次訪問懶值,都會有一個方法被調用,這個方法會以線程安全的形式檢查該值是否被初始化。