scala中有乙個灰常強大的東西,叫做模式匹配。可以理解為switch,只是比它更加強大。
var sign = -1
val ch:char = '+'
/** * 模式匹配:更好用的switch
*/ch match
和switch不同的是,沒乙個匹配條件後面,不需要break(想到當年寫switch,忘記break的痛苦經歷、、、),不會掉入下乙個分支。
如果想要新增多個case標籤,可以不用從case』0』寫道case』9』,可以向下面這樣做:
ch match
型別模式
//型別模式
var obj : any = 1024
var o = obj match
列表、元組、資料匹配
var sth = arr match
val lkt = list(0, -3, -5, 7, 8)
var value = lkt match
var pair = (0, 1)
pair match
變數中的模式匹配
val
(q,r) = bigint
(10) /% 3
上面**中,會將商和餘數分別賦值給q,r
for迴圈中的模式匹配
for ((k, v) <- system.getproperties())
println(k + "->" + v)
for ((k, "") <- system.getproperties())
println(k)
for ((k, v) <- system.getproperties() if v=="")
println(k)
第二個和第三個for迴圈只會列印value為空的k鍵
樣例類
abstract
class
amount
val amt:amount = new dollar(11.2)
case
class
dollar
(value: double)
extends
amount
case
class
currency
(value:double,unit: string)
extends
amount
case
object
nothing
extends
amount
var v = amt match
當宣告樣例類時,會有以下幾件事情自動發生
copy方法
val am = currency(29.25,"eur")
val price = am.copy(value = 19.25) //currency(19.25,"eur")
val pr = am.copy(unit = "chf") //currency(29.25,"chf")
偏函式
偏函式,乙個並非對所有輸入值都定義的函式
val f:partialfunction[char,int] =
scala學習十四 模式匹配
模式匹配詳解 package matchtest class matchtest val matest new matchtest matest.mat 1 型別的匹配 並將值賦給case後面的變數 package matchtest class matchtest def mat2 ref any...
Scala模式匹配
1.常量匹配 def constantmatch x int string x match def constantmathtest 輸出結果 one many2.列表匹配 def sequencematch x list int string x match def sequencemathtes...
scala模式匹配
這是scala中最有用的部分之一。匹配值val times 1 times match 使用守衛進行匹配 times match 注意我們是怎樣將值賦給變數 i 的。在最後一行指令中的 是乙個萬用字元 它保證了我們可以處理所有的情況。否則當傳進乙個不能被匹配的數字的時候,你將獲得乙個執行時錯誤。我們...