Swift: Curry 函数的好处

Swift: Benefits of Curry Function

我正在尝试掌握 curry 函数背后的概念。下面是代码:

class MyHelloWorldClass {

    func helloWithName(name: String) -> String {
        return "hello, \(name)"
    }
}

我可以创建一个指向 class 的 helloWithName 函数的变量:

let helloWithNameFunc = MyHelloWorldClass.helloWithName
// MyHelloWorldClass -> (String) -> String

我的新 helloWithNameFuncMyHelloWorldClass -> (String) -> String 类型,一个 function 接受我的 classreturns 另一个 [=17= 的实例] 接受 string 值和 returns 一个 string 值。

所以我实际上可以这样称呼我的 function

let myHelloWorldClassInstance = MyHelloWorldClass()

helloWithNameFunc(myHelloWorldClassInstance)("Mr. Roboto") 
// hello, Mr. Roboto

来源:我从这个 site

中获取这段代码

使用上面的 curry 函数有什么好处?什么时候需要调用一个采用其 class 实例的函数,该函数采用传递的后续参数。

问题是给出的例子并不是柯里化的例子。这就是为什么你看不到它的任何价值。

这是柯里化的一个更好的例子:

class MyHelloWorldClass {
    //Function that takes two arguments
    func concatenateStrings(string1: String, string2: String) {
        return "\(string1)\(string2)"
    }
    //Curried version of concatenateStrings that takes one argument. 
    func helloWithName(name: String) -> String {
        return concatenateStrings("hello, ", name)
    }
}

这是函数变量如何在 Swift 中柯里化函数的更好示例:http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/