gpt4 book ai didi

swift - Apple 的 Swift 编译器在 Array 上创建扩展方法时提示部分应用

转载 作者:搜寻专家 更新时间:2023-10-31 22:36:18 24 4
gpt4 key购买 nike

作为学习 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

关于swift - Apple 的 Swift 编译器在 Array 上创建扩展方法时提示部分应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com