我已经看过这种形式语法的几个例子(我在swift中搜索currying时看到了这个)
func funcName(a: TypeOfA)(b: TypeOfB) -> returnType
{
return somethingOfreturnType
}
但是我无法找到Swift Programming Language电子书中描述的这种语法。我刚看了一下关于功能的章节,而不是我能看到的。本书的哪一部分描述在哪里?
这种语法是什么意思,它与此有何不同:
func funcName(a: TypeOfA, b: TypeOfB) -> returnType
答案 0 :(得分:3)
这是一个 curried函数 - 它将几个参数的函数分解为一个参数的链,每个函数包含一个参数。您可以在本书的“语言参考”部分阅读相关内容:转到Function declaration并向下滚动一下。
它相当于:
func funcName(a: TypeOfA) -> (b: TypeOfB -> returnType) {
func curryFunc(b: TypeOfB) -> returnType {
return somethingOfreturnType
}
return curryFunc
}
答案 1 :(得分:1)
Swift语法包括对currying的支持。 Currying是将N参数函数转换为N个参数函数的“链”的过程。顶级函数接受一个参数并返回N-1个函数的“链”。咖喱功能的主体可能会使用每个论点;对于链中的每个链接,返回的函数在该一个参数上“关闭”。
示例:
想象一下,您需要将重复的一个值与其他值进行比较以获得相等性。您可以将curried函数定义为:
func equalTo (this: Equatable) (other: Equatable) -> Bool { return this == other }
然后用作:
let equaltoTen = equalTo(10);
// ...
equalToTen (11) ; false
或
let equalToUsername = equalTo ("Joe Rogan")
另外,想象一下你需要重复排序相同的数组。你可以这样做:
func sortingOf<T> (data: [T]) (pred: (T, T) -> Bool) -> [T] {
// apply 'pred' to 'data' return sorted array of data
}
然后使用示例:
let sortingOfNames = sortingOf (["Steve", "John", "Mark", "Billy"])
// ...
sortingOfNames(>)
sortingOfNames(<)