Scala模式匹配和樣例類

2021-08-16 01:56:44 字數 2236 閱讀 8371

scala 有乙個十分強大的模式匹配機制,可以應用到很多場合:如 switch 語句、型別檢查等。並且 scala 還提供了樣例類,對模式匹配進行了優化,可以快速進行匹配。

package cn.cheng.cases

import scala.util.random

val arr = array (" " hadoop" ", " " zookeeper" ", " " spark" ")

val name = arr (random.nextint( arr .length))

name match

}

package cn

.cheng.cases

import scala.util.random

val arr =

array ( "hello", 1, 2.0, casedemo)

val v = arr (random.nextint(4))

println ( v )

v match

}

注意 :case y: double if(y >= 0) => …

模式匹配的時候還可以新增守衛條件。如不符合守衛條件,將掉入 case _中。

package cn.cheng.cases

val arr = array (1, 3, 5)

arr match

val lst = list (3, -1)

lst match

val tup = (1, 3, 7)

tup match

}

注意:在 scala 中列表要麼為空(nil 表示空列表)要麼是乙個 head 元素加上乙個 tail 列表。

9 :: list(5, 2) :: 操作符是將給定的頭和尾建立乙個新的列表

注意::: 操作符是右結合的,如 9 :: 5 :: 2 :: nil 相當於 9 :: (5 :: (2 :: nil))

在 scala 中樣例類是一種特殊的類,可用於模式匹配。

定義形式:

case class 型別,是多例的,後面要跟構造引數。

case object 型別,是單例的

package cn

.cheng.cases

import scala.util.random

case class submittask(id: string, name: string)

case class heartbeat(time: long)

case object checktimeouttask

val arr =

array (checktimeouttask, heartbeat (12333), submittask ( "0001", "task-0001"))

arr (random.nextint( arr .length)) match

case heartbeat (time) =>

case checktimeouttask => }}

在 scala 中 option 型別用樣例類來表示可能存在或者可能不存在的值(option 的子類有some 和 none)。some 包裝了某個值,none 表示沒有值。

package cn.cheng.cases

object

optiondemo

println (v)

//更好的方式

val v1 = map.getorelse( "c", 0)

println (v1)}}

被包在花括號內沒有 match 的一組 case 語句是乙個偏函式,它是 partialfunction[a, b]的乙個例項,a 代表輸入引數型別,b 代表返回結果型別,常用作輸入模式匹配,偏函式最大的特點就是它只接受和處理其引數定義域的乙個子集。

Scala 模式匹配和樣例類

scala的模式匹配機制,可以應用到很多場合 scala還提供了樣例類,對模式匹配進行了優化,可以快速進行匹配 匹配字串 todo 匹配字串 類似 switch 定義乙個陣列 val arr array hadoop zookeeper spark storm 隨機取陣列中的一位,使用random....

Scala基礎 模式匹配和樣例類

package com.zy.scala import scala.util.random 模式匹配 object casedemo 匹配資料型別 val arr2 array hello 1,2.0,casedemo val v arr2 random.nextint 4 println v v ...

Scala集合庫 模式匹配和樣例類

package com.yz8 import org.junit.test class test test def test2 unit list.head sum list.tail val i sum ints println i 27 一般不用return返回值 一般當作break來用 tes...