// function 1------- Currying
func increment (incrementBy x: Int)(y: Int) -> Int {
return x + y
}
// function 2------- The function that return a function
func increment(incrementBy x: Int) -> ((Int) ->Int){
func incrementFunc(y: Int){
return x + y
}
}
这两个功能是否做同样的事情,不是吗?我可以用同样的方式使用它们。像这样:
let incrementFunc = increment(incrementBy: 10)
var number = 10
number = incrementFunc(number)
所以,我很困惑,他们有什么区别?每种方式的优点是什么?
答案 0 :(得分:6)
你的第一个例子是"句法糖"对于第二个,[Int]
是Array<Int>
的简写。它们的意思相同,行为方式相同。
然而,我应该指出,这种语法糖很快就会消失。 This proposal由Swift编译工程师编写,并由Swift开发团队接受,他说速记currying语法将不再是语言的一部分。相反,所有的讨论都将按照你的第二个例子的方式完成。
答案 1 :(得分:1)
第一个功能2应该是:
func increment(incrementBy x: Int) -> ((Int) ->Int){
func incrementFunc(y: Int) -> Int {
return x + y
}
return incrementFunc
}
在这种情况下,功能1&amp; 2做同样的事情。 第一个稍微缩短一点。 第二个似乎更清楚其意图。
你也可以使用更短更清晰的功能3:
func increment(incrementBy x: Int) -> ((Int) ->Int){
return { y in return x + y }
}