面向型別程式設計/函子
外觀
< 面向型別程式設計
函子是一種型別運算子,它配備了一個名為 map 的方法,宣告如下
type Functor[T] {
func map[U](f Func[T,U]) Self[U]
}
map 方法必須滿足一些形式要求,我們現在忽略這些要求。重要的是,map 接受一個型別為 Func[T,U] 的函式(其中 U 是方法的型別引數),並返回一個型別為 Self[U] 的例項,即相同但可能具有不同型別引數的函子。您已經遇到了 Maybe 函子
type Maybe[T] : Functor[T] {
property val T
func map[U](f Func[T,U]) Self[U] {
return new Self[U] {
val = self.val.isNil() ? nil : f(self.val)
}
}
func description() String {
return self.val.isNil() ? "none" : self.val.description()
}
}
在下一節中,我們將使用 Maybe 來解釋什麼是單子以及如何實現泛型 Monad 型別。
注意:虛擬碼可以使用 Funcy 應用程式進行嘗試,該應用程式可以從 Apple App Store (iOS/macOS)、Google Play (Android) 或 Amazon Appstore 免費下載。要執行的程式碼必須放在 main {} 塊中。