作为学习Swift的一种方式,我一直在操场上实现一些功能操作员。我在定义一个合成(<<
)和反向合成(>>
)运算符时我有多么沮丧,我感到很沮丧,我想知道是否有一种惯用的方法可以做这很快:
infix operator << {associativity right}
func << <T,U,N>(f: N -> U, g: T -> N) -> (T -> U) {
return { f(g($0)) }
}
我也有翻转功能:
func flip<A, B, T>(f: (A,B) -> T) -> (B, A) -> T {
return { (b: B, a: A) -> T in return f(a, b) }
}
我想在翻转我的合成运算符方面定义反向合成运算符(>>
),但到目前为止我还没有运气。相比之下,这对我来说似乎很难看:
infix operator >> {associativity left}
func >> <T, U, N>(g: T -> N, f: N -> U) -> (T -> U) {
return f << g
}