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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- [譯] Scala 型別的型別(四)型別
- [譯] Scala 型別的型別(二)型別
- [譯] Scala 型別的型別(三)型別
- [譯] Scala 型別的型別(六)型別
- [譯] Scala 型別的型別(五)型別
- 複合型別(json)型別JSON
- Java中基本型別Array與複合型別List的互相轉換Java型別
- Scala 泛型型別和方法泛型型別
- 簡單型別與複雜型別及原型鏈型別原型
- Redis資料結構:List型別全面解析Redis資料結構型別
- oracle-複合資料型別Oracle資料型別
- PL/SQL複合資料型別SQL資料型別
- 【Scala之旅】特質與高階型別型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- Go 複合型別之字典型別介紹Go型別
- Scala(一)資料型別資料型別
- 【Scala之旅】型別引數型別
- 探索Scala(5)-- 基本型別型別
- libdispatch 結構型別型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- 第 10 節:複合型別 2: 切片型別
- 複合資料型別和遊標資料型別
- 淺談oracle複合資料型別Oracle資料型別
- 02. 複合型別(Composite Types)型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- Scala 中的集合(一):集合型別與操作型別
- 值型別與引用型別型別
- oracle資料型別與儲存結構Oracle資料型別
- C#的型別——值型別與引用型別C#型別
- 第 10 節:複合型別 1:陣列型別陣列
- 第 10 節:複合型別 小練習!型別
- PLSQL學習-【4複合資料型別】SQL資料型別
- 淺談oracle複合資料型別 (1)Oracle資料型別
- 淺談oracle複合資料型別 (2)Oracle資料型別
- ECMAScript 原始型別與引用型別型別
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別