2010-08-29 75 views

回答

22

用於Scala中實現靜態辨認的多態性的基本工具是

  • 亞型(沼澤標準OO多態性)
  • 類型參數(允許多態性方差和約束)
  • 自分型(允許OO多態性的限制和專門化)
  • 隱式轉換(允許事後多態構造)
  • 結構分型(允許聚根據特徵,而不是類型態射)
  • 普通型邊界(允許在允許的多態性極其精確的約束)
  • 模式匹配(允許基於數據結構中,類似於抽象數據類型)
  • 高等kinded類型多態性(允許多態性結構的多態性)

調用所有這些'替代品'可能是錯誤的詞,因爲它們很好地結合在一起。通過結合使用這些工具中的一些來表達一些多態算法並不罕見。

也值得注意的是在Scala多態中的理解的地方。對於理解,似乎並不特別多態。在表面之下,for-comprehensions只是調用filter/map/flatMap的語法糖,而這些方法的實現往往是高度多態的。因此,看起來相對簡單的for-loops可能會導致一些非常令人印象深刻的多態效應。

+3

將結構類型描述爲「基於值的特徵」而不是「值的行爲」可能更準確,因爲從類型系統的角度來看,行爲是一個不透明的屬性。 – 2010-08-29 21:17:41

+2

我錯過了「支持更高級別的類型」列表,這是Scala最強大的功能之一。我認爲最好的參考依然是阿德里安·摩斯的論文:http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf – Landei 2010-08-29 21:39:33

+1

優秀的評論。編輯。 – 2010-08-29 22:49:06