1. 程式人生 > >scala類型系統:24) 理解 higher-kinded-type

scala類型系統:24) 理解 higher-kinded-type

簡單 div .info AS 是個 類型系統 基本 inf upload

首先我們從最基本的泛型來看:
技術分享圖片

現在我們對上面泛型中的類型參數再進一步,也是個泛型會如何呢?
技術分享圖片

可以看到,java中不支持類型參數也是泛型類型的情況,而scala支持。這是一個很重要的區別,scala在類型系統上要比java強大。我們現在簡單對類型歸納一下,可以分為兩類:

技術分享圖片

現在我們來看 higher-kinded-type ,先要理解 kind 是什麽意思,如果說類型(type)是對數據的抽象,比如1,2,3等抽象為Int類型,”hello”,”wolrd”等可抽象為String類型。那麽kind則是對類型的抽象。

技術分享圖片

proper type 用 * 號表示:
技術分享圖片

泛型類型(用於構造proper type的類型)則可以用下面的方式表示,比如 Set[T], List[T],

再如 Pair[K,V] 泛型類型

技術分享圖片

如果泛型類型中的參數類型又是一個泛型,比如前邊的 List2

技術分享圖片

這種類型參數也是泛型類型的類型,稱之為高階(higher)kind,是不是很像高階函數?借用這張圖做個匯總:

技術分享圖片

http://hongjiang.info/scala-higher-kinded-type/

scala類型系統:24) 理解 higher-kinded-type