我试图掌握咖喱功能背后的概念。以下是代码:
class MyHelloWorldClass {
func helloWithName(name: String) -> String {
return "hello, \(name)"
}
}
我可以创建一个指向类helloWithName
函数的变量:
let helloWithNameFunc = MyHelloWorldClass.helloWithName
// MyHelloWorldClass -> (String) -> String
我的新helloWithNameFunc
类型为MyHelloWorldClass -> (String) -> String
,function
代表我的class
和returns
另一个function
的实例获取string
值并返回string
值。
所以我实际上可以这样打电话给我function
:
let myHelloWorldClassInstance = MyHelloWorldClass()
helloWithNameFunc(myHelloWorldClassInstance)("Mr. Roboto")
// hello, Mr. Roboto
信用:我从此site
获取此代码使用上述咖喱功能有什么好处?什么时候需要调用一个接受其类实例的函数,它接受传递的后续参数。
答案 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/