case class 和 class的區別

2021-07-25 06:41:46 字數 2151 閱讀 6369

//*case class

和class的區別

case classcalculator(brand:string,valmodel:string){}//

無需宣告val也可以宣告成員常量

valhp20b =newcalculator("hp","20b")

valhp30b = calculator("hp","30b")//defcalctype(calc: calculator) = calcmatch

calctype(hp20b)

calctype(hp30b)

// 2. 而且構造器的變數名無需宣告val即為成員常量,可以在類定義外訪問hp30b.brand

hp30b.brand//brand

無需宣告val

// 3.宣告為caseclass或者case object才可以進行模式匹配,class不可以,不僅可以是通過類名匹配,還可以同一類名但通過不同的引數進行識別匹配,還可以是

//

傳入any類的物件後進行匹配

defbigger(o: any): any =

}classcalculator2(valbrand:string,valmodel:string){}

//通過類的成員來判斷

defcalctype2(calc: calculator) = calcmatch

例項tree

//**case object

和簡單操作

sealed abstract classtreecase classnode(left:tree, right:tree)extendstreecase classleaf[a](value:a)extendstreecase objectemptyleafextendstree

//方便的構建新的樹物件

valtreea = node(emptyleaf, leaf(5))//leaf

自動識別傳入物件為int型別

valtreeb = node(node(leaf(2), leaf(3)), leaf(5))

//通過轉殖修改樹結構,scala的思想是immutable datatype 所以改變結構是複製舊樹的部分或全部結構來建立新的tree,

valtreec = treea.copy(left = treeb.left)//val treea

和treeb都是常量不會被改變

//美化輸出

println("treea:"+ treea)

println("treeb"+ treeb)

println("treec"+ treec)

//對比

println("treea == treeb: %s".format(treea == treeb).tostring)

//模式匹配

treeamatch

//因為採用了sealed關鍵字,強制了編譯器幫我們檢查模式匹配中的所有的case情況

defchecktree(t:tree) = tmatch//

注釋了的三種情況都會被編譯器檢查出來並警告

模式匹配case class

正則匹配 val pattern 0 9 a z r 741258933 hadoop match 輸出結果 741258933 hadoop def match array arr any arr match match array array 0 match array array 0,1 ma...

關於用case class解析parquet的問題

今天review 的時候發現乙個問題,用case class去解析乙個parquet檔案,parquet檔案的schema如下 id string name string age string string 有四個屬性,按理說應該構造如下case class去解析 case class people...

class和object getClass方法區別

如上圖 1.記憶體建立乙個instance例項物件 person per 同時會建立乙個與之對應的類物件 class perclass 和元類物件 class permeta 注 例項物件通過calloc可建立多個,但類物件和元類物件在記憶體中只有乙份,只建立一次 2.物件的本質,其實是c語言的結構...