[Scala] Function 與 Function 間的子類別關係。

前言

說真的,雖然高中的時候接觸過一點 C / Pascal,大學的時候正式接觸 C / Java 來寫程式,但還是一直到開始玩 Scala 之後,才知道原來一個函式可以是另一個函式的子類別。

只是就算有了這個粗淺的概念,也大致上知道什麼是 covariant / contravariant / invariant,但其實對於這個函式與函式之前的子類別關係一直都是一知半解的,一直到這個月上了 Coursera 網站上的 Functional Programming Principles in Scala 後,才終於搞懂函式與函式之間的子類別是什麼意思。

所以趁著腦袋還沒變鈍之前,來寫一篇筆記,記錄我理解這個問題的方式,方便以後查看復習。 XDD

普通物件的繼承關係與 Polymorphism

如果用過 C++ / Java 等物件導向的程式語言,那麼對於普通物件的繼承關係應該會很熟悉,大部書上最常舉的例子會像下面這樣:

class Animal {
  def eat() = println("I'm eating ...