印度朋友手把手教你学Scala(10):Scala里的样本对象
2019獨角獸企業重金招聘Python工程師標準>>>
/*** 謹獻給我最愛的YoYo * 原文出處:https://madusudanan.com/blog/scala-tutorials-part-10-case-objects-in-scala/* @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-14*/本翻譯已征得Madusudanan.B.N同意,并鏈接在原文教程前面。
樣本對象
我們已經學習了對象和樣本類。樣本對象是這兩者的合體,即它是一個類似對象的單例并且有在樣本類中大量的和大量的樣板。唯一的區別是,樣板是為一個對象而不是一個類完成的。
這是關于Scala系列教程的第十章。點擊這里可查看整個系列。
目錄
- 簡介
- 樣本對象和樣本類
- 樣本對象的優勢
- 結論
簡介
如果你需要針對樣本類的樣板,樣本對象是非常有用的。
它們可以這樣創建。
case object CaseObjectDemo {println("I am a case object")}當你將一個樣本對象和一個樣本的反編譯版本類進行比較,你將能夠看到兩者之間的差異。
樣本對象和樣本類
在樣本對象中缺少以下東西。
- apply,unapply方法。我們稍后會看到這個
- 因為它是一個單例,所以沒有復制方法
- 沒有結構相等比較的方法
- 也沒有構造函數
與樣本類相比,缺少的這些部分是實際上是不需要的。
樣本對象的優勢
與普通object相比,我們可以清楚地看到,反編譯類中生成什么。
- toString方法
- 基于Murmur哈希的hashCode方法
- 樣本對象/樣本類默認是可序列化的
我們可以通過以下代碼示例來驗證它是可Serializable的。
// 將會打印falseprintln(SerializationExample.isInstanceOf[Serializable])// 將會打印trueprintln(CaseObjectSerializationExample.isInstanceOf[Serializable])object SerializationExample {}case object CaseObjectSerializationExample {}如果我們使用普通的object,讓它變得可序列化,那么它可以擴展特質Serializable。
// 將會打印true,因為它擴展了特質Serializableprintln(SerializationExample.isInstanceOf[Serializable])// 將會打印trueprintln(CaseObjectSerializationExample.isInstanceOf[Serializable])object SerializationExample extends Serializable{}case object CaseObjectSerializationExample {}結論
我們已經到了文章的結尾。這是一個相當短的,我們看到有一個叫做樣本對象的東西,以及為什么它會存在。
當與其對應的樣本類比較時,樣本對象提供的普通對象的語法糖會成為一個爭論。乍一看,他們似乎沒有太多的優勢,但實際上有很多。
在下面的教程中,我們將看到尊對象的用法,其中語法糖實際上變成良好的可讀代碼,特別是在這兩種情況下:
1)當可以使用樣本類和樣本對象進行模式匹配時
2)在Scala中使用樣本對象作為枚舉的基本結構
這些是學習各種函數式編程概念所必備的高級主題。我們會一個個征服他們。
敬請關注!^_^
------------------------?
- 本作品采用知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本許可協議進行許可。
- 本文翻譯作者為:dogstar,發表于艾翻譯(itran.cc);歡迎轉載,但請注明出處,謝謝!
轉載于:https://my.oschina.net/dogstar/blog/864206
總結
以上是生活随笔為你收集整理的印度朋友手把手教你学Scala(10):Scala里的样本对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: try_module_get和modul
- 下一篇: python 反射实体,动态应用