作为学习 Swift 的练习,我尝试编写数组的最小和最大函数,如下所示:
extension Array {
func comparest<C: Comparable>(comparator: T -> C, _ op: (C, C) -> Bool) -> T? {
var min = self.first
for elem in self {
if op(comparator(elem), comparator(min!)) {
min = elem
}
}
return min
}
func minimum<C: Comparable>(var _ comparator: (T -> C)? = nil) -> T? {
if comparator == nil {
comparator = { elem -> C in elem as C }
}
return self.comparest(comparator!, <)
}
}
我省略了最大函数,因为它与最小值相同,但传递了不同的运算符comparest
。我已经测试过comparest
功能并且运行良好,例如
var array = [4, 2, 3]
var min = array.comparest({ $0 }, <)!
min 的值正确为 2。
我的问题是编译器不喜欢我的minimum
功能。它在线路上显示一个愤怒的红色错误self.comparest(comparator!, <)
并说“不允许部分应用通用方法。”我已经编写了足够多的 Haskell 代码来了解什么是部分应用程序,但对我而言,这看起来不像部分应用程序。所有参数均已指定。
有任何想法吗?
要将运算符用作函数,请将其括在括号中:
var min = array.comparest({ $0 }, (<))!
例如:
[1,2,3].reduce(0,(+)) // -> 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)