【发布时间】:2017-04-12 05:00:04
【问题描述】:
我正在尝试将闭包用于一阶谓词演算,并且 我打算定义以下函数:
func ASSUM<U, V>(p: @escaping Pred<U>) -> (Pred<U>) -> Pred<(U, V)> {
return { q in AND1(p: p, q: q) }
}
将谓词p: Pred<U> 作为参数,其中Pred<U> 是(T) -> Bool 的类型别名:
typealias Pred<T> = (T) -> Bool
ASSUM 的返回是 (Pred<U>)->Pred<(U,V)> 类型的谓词转换器闭包。
但是编译器返回以下错误:
Passing non-escaping parameter 'q' to function expecting an @escaping closure
我了解定义的函数AND1 请求转义参数:
func AND1<U, V>(p: @escaping Pred<U>, q: @escaping Pred<V>) -> Pred<(U, V)> {
return { (x, y) in (p(x) && q(y)) }
}
但我没有成功地在{ q in AND1(p: p, q: q) } 中明确地使q 转义。
我该如何解决这个问题?
【问题讨论】:
标签: swift generics escaping closures