这是什么语法:func funcName(stuff1)(stuff2) - > returnType {}

时间:2014-08-14 21:38:16

标签: swift

我已经看过这种形式语法的几个例子(我在swift中搜索currying时看到了这个)

func funcName(a: TypeOfA)(b: TypeOfB) -> returnType
{
   return somethingOfreturnType
}

但是我无法找到Swift Programming Language电子书中描述的这种语法。我刚看了一下关于功能的章节,而不是我能看到的。本书的哪一部分描述在哪里?

这种语法是什么意思,它与此有何不同:

func funcName(a: TypeOfA, b: TypeOfB) -> returnType

2 个答案:

答案 0 :(得分:3)

这是一个 curried函数 - 它将几个参数的函数分解为一个参数的链,每个函数包含一个参数。您可以在本书的“语言参考”部分阅读相关内容:转到Function declaration并向下滚动一下。

它相当于:

func funcName(a: TypeOfA) -> (b: TypeOfB -> returnType) {
    func curryFunc(b: TypeOfB) -> returnType {
        return somethingOfreturnType
    }
    return curryFunc
}

It's also good with sausages.

答案 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(<)