iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

今天來聊聊案例類別(case class)

當談到Scala的模式比對時,常常會跟著提到case class
而case class又是什麼?它跟之前提到的類別有什麼不同嗎?

在Scala裡,對一個類別加上關鍵字case,就是案例類別
案例類別有別於前面提到過的class,它有以下幾種作用:

  1. 當我們把class宣告成case class時,compiler會生成一個伴生物件(companion object)並且會放置一個名為apply的工廠方法(這樣就不需要使用new來建立物件)
  2. 接者complier會把類別裡的全部參數都存到屬性並生成一個包含相同名稱參數的取值方法(這樣就可以直接取值)
  3. 然後complier會一個toString的實作
  4. 最後complier會為你的類別生成一個hashCode和equals的實作
case class Dog(name: String, age: Int)

val d = Dog("Tom", 4)    // 1. 工廠方法:Dog.apply("Tom", 4)
d.name    // 2. Tom
d.age     //    4

d.toString    // 3. Dog("Tom", 4)

d == Dog("Tom", 4)
d.hashCode == Dog("Tom", 4).hashCode    // 4. true

這些所有的便利性有一小部分的代價,就是類別會跟物件會變得比較大,因為有生成額外的方法而且每個建構參數都被添加隱性的屬性。


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

尚未有邦友留言

立即登入留言