Swift:'Currying'和返回函数的函数有什么区别?

Eru*_*ang 4 currying ios swift swift2

//  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
       }
    }
Run Code Online (Sandbox Code Playgroud)

这两个功能是否做同样的事情,不是吗?我可以用同样的方式使用它们.像这样:

let incrementFunc = increment(incrementBy: 10)
var number = 10
number = incrementFunc(number)
Run Code Online (Sandbox Code Playgroud)

所以,我很困惑,他们有什么区别?每种方式的优点是什么?

erd*_*ser 6

你拥有的第一个例子是第二个例子的"语法糖",类似于[Int]简写的方法Array<Int>.它们意味着同样的事情,并以同样的方式行事.

但是,我应该指出,这种语法糖很快就会消失.这个由Swift编译工程师编写并被Swift开发团队接受的提案表示,速记currying语法将不再是该语言的一部分.相反,所有的currying都将按照你的第二个例子的方式完成.

  • 基本上,第一个(语法糖)说,"斯威夫特,请为我这个功能." (2认同)