斯威夫特:咖喱功能的好处

时间:2015-02-19 01:40:35

标签: swift currying

我试图掌握咖喱功能背后的概念。以下是代码:

class MyHelloWorldClass {

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

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

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

我的新helloWithNameFunc类型为MyHelloWorldClass -> (String) -> Stringfunction代表我的classreturns另一个function的实例获取string值并返回string值。

所以我实际上可以这样打电话给我function

let myHelloWorldClassInstance = MyHelloWorldClass()

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

信用:我从此site

获取此代码

使用上述咖喱功能有什么好处?什么时候需要调用一个接受其类实例的函数,它接受传递的后续参数。

1 个答案:

答案 0 :(得分:3)

问题在于给出的示例不是完全干扰的示例。这就是你没有看到任何价值的原因。

这是一个更好的例子:

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中作为curried函数的更好示例:http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/