所以一直在瞎搞具有部分功能的應用程序即實驗與夫特3操作者的優先級和局部功能應用
func partial<A, B, C>(_ @escaping f: (A, B) -> C, _ a: A) -> (_ b: B) -> C {
return { b in f(a, b) }
}
這是涼爽。我可以做let equals3 = partial(==, 3)
,一切按預期工作
現在,當我試圖讓運營商爲這個斯威夫特3件事情變得不那麼酷
infix operator •
func • <A, B, C>(_ @escaping lhs: (A, B) -> C, _ rhs: A) -> (_ b: B) -> C {
return { b in lhs(rhs, b) }
}
let equals3 = (== • 3)
引發編譯消息Unary operator cannot be separated from it's operand
所以我也許會感到困惑,因爲這兩個運算符==
和•
彼此相鄰而沒有聲明任何優先規則(儘管根據我的理解,==
不應該在此位置被認爲是運算符通貨膨脹)
但儘管如此,在做
precedencegroup FunctionApplicationPrecedence {
higherThan: ComparisonPrecedence // the precedencegroup == belongs to
}
infix operator • : FunctionApplicationPrecedence
let equals3 = (== • 3)
不編譯,並提出了同樣的信息
我在這裏誤解的東西?