iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

連續30天 初學者介紹Scala語言系列 第 23

[Day 23]Scala Pattern Matching

  • 分享至 

  • xImage
  •  

今天來聊Scala的模式比對(Pattern matching)

根據維基百科

模式比對是檢查給定記號序列中,是否存在某種模式的組成部分的行為。

簡單來說,Scala裡的模式比對(Pattern matching)是一種依據模式來檢查value的機制,作用類似Java裡的switch statement不過更為強大,並且可以省略很多需要用if/else來判斷的語句。
以下是一些之後會談到的模式種類:

  • Wildcard patterns
  • Constant patterns
  • Variable patterns
  • Constructor patterns
  • Sequence patterns
  • Tuple patterns
  • Typed patterns

先來講Wildcard patterns(萬用字元模式)

Wildcard pattern的表示方式是(_),它可以比對任何對象。
之前提到match運算式時,我們說最後要放一個default的case不然編譯時可能會出現MatchError,而那個default case就可以用萬用字元表示

val i = 10

i match:
    case 10 => println("10")
    case _ => println("other")

所以這邊的(_)指的是除了10以外的任何對象

Constant patterns(常數模式)

Constant pattern只能比對自己
任何常量(literal)都可以當作constant,此外任何的val或單例物件也可以當作constant。

def test(x: Any) = x match 
    case 10 => "Int"
    case 'hi' => "String"
    case true => "Boolean"

最後一個要介紹的是Variable patterns(變數模式)

Variable pattern也可以比對任何物件,類似萬用字元模式。不過不同的是,變數模式會把物件跟變數綁定在一起,如此一來就可以在case語句的右邊使用變數。

i match
case  0 => "0"
case other => "output is" + other

/images/emoticon/emoticon05.gif


上一篇
[Day 22]Scala Case class
下一篇
[Day 24]Scala Pattern Matching Part2
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言