Operators
Thread.`yield`()反引號除了用于命名識別符號,還可以在呼叫方法時避免沖突(yield為 Scala 關鍵字,但也是Thread的方法)- 中綴運算子(infix operators),實際是帶兩個引數的方法,定義時跟普通方法一樣;
a to b實際是a.to(b) - 一元運算子(unary operators)
+, -, !, ~四個可當做前綴運算子使用,-a實際是a.unary_- 如果可放在引數后,則是后綴運算子
a identifier
- 賦值運算子(assignment operators),
a operator= b等價于a = a operator b - 優先性
* / %>+ ->:>< >>! =>&>^>|> 非運算子 > 賦值運算子- 中綴運算子優先于后綴運算子
- 結合性
- 所有運算子都是左結合的,除了:
- 以
:結尾的運算子1 :: 2 :: Nil實際是1 :: (2 :: Nil)- 右結合的二元運算子實際是第二個操作物件的方法,如
2 :: Nil是Nil.::(2)
- 賦值運算子
- 以
- 所有運算子都是左結合的,除了:
- 如果
f(a,b,c)呼叫時f不是函式或方法,則等價于f.apply(a,b,c)f(a,b,c) = value則等價于f.update(a,b,c, value);如針對HashMap的取值和賦值- 常用來構建物件時,省略
new關鍵字
- 提取器 extractors
- 包含
unapply方法的伴生物件,伴生物件可以定義成給任意型別做為提取器(如,為 String 自定義一個提取器 Name) - 在變數定義時使用
- 在模式匹配中使用
case class自動附帶apply和unapply方法,在模式匹配中會自動呼叫
- 提取任意序列值,需要包含
unapplySeq方法,回傳Option[Seq[Type]] -
- 包含
- 動態呼叫 dynamic invocation
- 定義動態型別
import scala.language.dynamics- 繼承
scala.Dynamic
- Scala 處理程序
foo.method("blah")~>foo.applyDynamic("method")("blah")foo.method(x = 1, 2)~>foo.applyDynamicNamed("method")(("x", 1), ("", 2))foo.field~>foo.selectDynamic("field")foo.varia = 10~>foo.updateDynamic("varia")(10)foo.arr(10) = 13~>foo.selectDynamic("arr").update(10, 13)foo.arr(10)~>foo.applyDynamic("arr")(10)
- 定義動態型別
Files & RegExp
- 讀取所有行
Source.fromFile({name/java.io.File}).getLines.toArray,關閉資源source.close - 讀取字符,直接迭代 source
- 讀取標準輸入
scala.io.StdIn - 讀取 URL
Source.fromURL(url, "UTF-8") - 讀取字串
Source.fromString("Hello ww") - 讀取二進制檔案,使用 Java 的庫
- 寫檔案使用 Java 的庫
- 序列化
@SerialVerionUID(42L) class Name extends SerializableSerializable為 Scala 中的trait- 也可省略注解,使用默認的 UID
- Scala 的集合都是序列化的
- 行程控制
- 工具包
scala.sys.process,包含隱式轉換將String轉為ProcessBuilder - 執行 shell
"ls -l".!,!會執行ProcessBuilder并阻塞直到命令退出并回傳退出碼"ls -l".!!會將輸出作為字串回傳#|管道:("ls -l" #| "grep scala").!#>重定向輸出:("ls -l" #> new File("out.txt")).!#>>追加:("ls -l" #>> new File("out.txt")).!#<重定向輸入:("grep scala" #< new File("out.txt")).!("grep html" #< new URL("http://baidu.com")).!
- 設定執行目錄/環境變數
Process("ls -l", new File("../"), ("LANG", "en_US")).!,環境變數為(k, v)序列
- 在 Java 專案中執行 Scala 腳本
ScriptEngine engine = new ScriptEngineManager().getScriptEngineByName("scala")
- 工具包
- 正則運算式
* 工具類scala.util.matching.Regex
* 構造正則物件val pattern = "[0-9]+".r
* 存在轉義、引號等情況時使用""",val pattern = """\s+[0-9]+\s+""".r
* 捕獲組使用括號表示val patternName = "([0-9]+) ([a-z]+)".r
* 可定義正則變數作為提取器val pattern(num, item) = "123 abc"(patternName與定義的正則名一致)
* 也可在 for 回圈中使用正則變數直接提取捕獲組
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/1981.html
標籤:Scala
