現在我先來講一點知識吧
在scala裡,每乙個單例物件a都存在乙個單例型別a.type,這個型別只有兩個值:a和null。這個特性實際上是非常冷門的乙個特性,實際運用中也比較少見,不過在這裡,我大量的使用了單例型別,依靠不同的單例型別的不同方法簽名進行方法過載,產生不同的動作。這種依靠過載的設計模式有著用模式匹配,if……else等控制語句難以達到的功能,譬如可以擁有不同的返回值等。
trait
insertionable
}def
<<(ty: type.type) = new ins
}class
ins(val ins: insertionable = this)
}
首先是class ins(val ins: insertionable = this)
,這乙個內部類的主構造器接受乙個insertionable 特質型別的引數,並且預設引數為包含這個內部類的insertionable型別引數自身的引用。這乙個內部類是為了方便《方法構建物件而創。
def
<<(ty: type.type) = new ins
}
這個方法的作用是通過ins :insertionable << type << t: tsbutton.type
的形式將ins轉換為sbutton型別。在我們呼叫ins << type
的時候,他會返回乙個作為ins類的子類的匿名型別,這個型別包含著由ins類的主構造器得到的ins的引用,同時有乙個<<(tsbutton.type)
方法,這裡也是我使用單例型別的核心所在。在以後,需要進行的強制轉換的時候,只需要新增單例物件的數量,並新增新的接受單例型別的函式過載即可。
def
<<(name: name.type) = new ins
}
演算法筆記學習筆記03
2.6 函式 問題 a 習題7 5 字串逆序存放 include includevoid change char a,char b b len 0 int main 問題 b 習題7 7 複製字串中的母音字母 include includevoid select char a,char b b j ...
AspectJ學習筆記 03
方面 方面的定義如下 access specification aspect extends class or aspect name implements inte ce list pointcut 關鍵字aspect申明了乙個方面。每乙個方面都有乙個名字,程式中其他部分可以使用該名字來訪問該方面...
Go學習筆記03
t1.go與main.go在同乙個資料夾下,main函式在main.go中。package main 小寫開頭,未公開的型別 type mytype int func mynew val int mytype 型別公開,部分成員不公開 type mystruct struct user和admin組...