Scala結構型別與複合型別解析
結構型別:定義方法或者表示式時,要求傳參具有某種行為,但又不想使用類,或者介面去限制,可以使用結構型別。
Scala複合型別解析:
點選(此處)摺疊或開啟
-
class Structural { def open()=print("A class instance Opened") }
-
-
object Structural__Type {
-
-
def main(args: Array[String]){
-
init(new { def open()=println("Opened") }) //建立了一個匿名物件,實現open方法
-
type X = { def open():Unit } //將右邊的表示式命名為一個別名
-
def init(res:X) = res.open
-
init(new { def open()=println("Opened again") })
-
-
object A { def open() {println("A single object Opened")} } //建立的單例物件裡面也必須實現open方法
-
init(A)
-
-
val structural = new Structural
-
init(structural)
-
-
}
-
-
def init( res: {def open():Unit} ) { //要求傳進來的res物件具有open方法,不限制型別
-
res.open
-
}
- }
Scala複合型別解析:
點選(此處)摺疊或開啟
-
trait Compound_Type1;
-
trait Compound_Type2;
-
class Compound_Type extends Compound_Type1 with Compound_Type2
-
object Compound_Type {
-
def compound_Type(x: Compound_Type1 with Compound_Type2) = {println("Compound Type in global method")} //限制引數x即是Type1的型別,也是Type2的型別
-
def main(args: Array[String]) {
-
-
compound_Type(new Compound_Type1 with Compound_Type2) //匿名方式,結果:Compound Type in global method
-
object compound_Type_oject extends Compound_Type1 with Compound_Type2 //object繼承方式,trait混入object物件中
-
compound_Type(compound_Type_oject) //結果都一樣,Compound Type in global method
-
-
type compound_Type_Alias = Compound_Type1 with Compound_Type2 //定義一個type別名
-
def compound_Type_Local(x:compound_Type_Alias) = println("Compound Type in local method") //使用type別名進行限制
-
val compound_Type_Class = new Compound_Type
-
compound_Type_Local(compound_Type_Class) //結果:Compound Type in local method
-
-
type Scala = Compound_Type1 with Compound_Type2 { def init():Unit } //type別名限制即是Type1,也是Type2,同時還要實現init方法
-
}
-
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1980424/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 複合型別(json)型別JSON
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- 簡單型別與複雜型別及原型鏈型別原型
- Redis資料結構:List型別全面解析Redis資料結構型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- 【Scala之旅】特質與高階型別型別
- 【Scala之旅】型別引數型別
- Scala(一)資料型別資料型別
- 02. 複合型別(Composite Types)型別
- Go 複合型別之字典型別介紹Go型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- 第 10 節:複合型別 2: 切片型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- 資料結構複習-01enum列舉型別資料結構型別
- ECMAScript 原始型別與引用型別型別
- 值型別與引用型別的區別型別
- 第 10 節:複合型別 1:陣列型別陣列
- 第 10 節:複合型別 小練習!型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- 基本資料型別與字串型別資料型別字串
- 來學習typescript 吧! --6 聯合型別 | 交叉型別 |型別斷言TypeScript型別
- 解析型別引數型別
- TypeScript 聯合型別TypeScript型別
- scala和java資料型別轉換Java資料型別
- Redis的ZSet底層資料結構,ZSet型別全面解析Redis資料結構型別
- 《Go 語言程式設計》讀書筆記 (一)基礎型別和複合型別Go程式設計筆記型別
- BGP報文結構&型別、狀態型別
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- cornerstone中msg型別解析型別
- Redis基礎(一)資料結構與資料型別Redis資料結構資料型別
- 結構體-簡單列舉型別——植物與顏色結構體型別
- Typescript 下 Mongoose 外來鍵型別&外來鍵陣列型別定義&型別保護&聯合型別理解TypeScriptGo型別陣列
- 可變資料型別(mutable)與不可變資料型別(immutable)總結資料型別
- 第 10 節:複合型別 1.4 氣泡排序與陣列去重型別排序陣列
- 組合資料型別資料型別
- 46_初識搜尋引擎_mapping複雜資料型別以及object型別資料底層結構大揭秘APP資料型別Object
- struts 結果型別型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別