組成
功能組合允許兩個功能操作並被視為單個功能。用數學術語表示,給定函式 f(x)
和函式 g(x)
,函式 h(x) = f(g(x))
。
編譯函式時,會將其編譯為與 Function1
相關的型別。Scala 在 Function1
實現中提供了兩種與組合相關的方法:andThen
和 compose
。compose
方法符合上述數學定義,如下:
val f: B => C = ...
val g: A => B = ...
val h: A => C = f compose g
andThen
(想想 h(x) = g(f(x))
)有一種更像’DSL’的感覺:
val f: A => B = ...
val g: B => C = ...
val h: A => C = f andThen g
分配了一個新的匿名函式,該函式在 f
和 g
上關閉。在這兩種情況下,此函式都繫結到新函式 h
。
def andThen(g: B => C): A => C = new (A => C){
def apply(x: A) = g(self(x))
}
如果 f
或 g
通過副作用起作用,那麼呼叫 h
將導致 f
和 g
的所有副作用按順序發生。任何可變狀態變化都是如此。