回覆列表
  • 1 # 使用者6185512508294

    以我的個人觀點來看,Protocol,Interface,Trait是一個東西。都是子型別多型。只要一個類實現(或者說滿足)Protocol,Interface,Trait裡面的要求,就可以被接受。區別在於小的語法部分,例如Protocol可以規定的範圍很廣,而Interface和Trait基本上都是方法上的規定。

    Concept和Typeclass是非常明顯的繫結多型。和普通的引數多型不同,引數多型的定義域是所有型別,和全稱量詞對應,例如λ2。而繫結多型要求這個型別必須滿足這樣那樣的條件。例如和。而且兩者都可以繫結高階型別。例如monad繫結的就是或者說,而C++模板裡也有這種引數。區別在於,Typeclass只要求實現具體的方法,但是Concept對引數的要求可以很高。不僅僅是限制其中要包含哪些方法,還可以要求需要包含哪些成員,要求型別相關的性質,甚至還會要求型別是否有trivial的建構函式,移動函式是否會拋異常等等。

    這幾個東西相似的地方在於,它們都大多是用“規定實現哪個或哪些方法”來實現的各種多型。

    這幾個東西還有一個區別,就是Protocol,Interface,Trait,Typeclass的實際型別被接受的必要條件是:實際型別在被接受之前,都必須要與相應的Protocol,Interface,Trait,Typeclass關聯。即和之類的。而Concept不用。被Concept接受的型別完全可以不知道Concept的存在。也就是說,前四個可以定製,而Concept就是單純的繫結多型,僅僅起到一個過濾的作用。

  • 中秋節和大豐收的關聯?
  • 新水滸傳武大郎扮演者?