我试图理解柯里函数背后的概念。下面是代码:
class MyHelloWorldClass {
func helloWithName(name: String) -> String {
return "hello, \(name)"
}
}
我可以创建一个指向类的 helloWithName
函数的变量:
let helloWithNameFunc = MyHelloWorldClass.helloWithName
// MyHelloWorldClass -> (String) -> String
我的新 helloWithNameFunc
的类型为 MyHelloWorldClass -> (String) -> String
,一个接受我的 实例的
和 函数
code>classreturns
另一个 function
,它接受一个 string
值并返回一个 string
值.
所以我实际上可以像这样调用我的函数
:
let myHelloWorldClassInstance = MyHelloWorldClass()
helloWithNameFunc(myHelloWorldClassInstance)("Mr. Roboto")
// hello, Mr. Roboto
信用:我从这个 site 获取这段代码
使用上面的柯里函数有什么好处?什么时候需要调用一个采用其类实例的函数,该函数采用随后传递的参数。
最佳答案
问题在于给出的示例并不是精确的柯里化(Currying)示例。这就是为什么你看不到它的任何值(value)。
这是柯里化(Currying)的一个更好的例子:
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 中柯里化(Currying)函数: http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/
关于Swift:柯里函数的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28597324/