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

时间:2016-01-20 02:00:13

标签: ios swift swift2 currying

//  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)

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

2 个答案:

答案 0 :(得分:6)

你的第一个例子是&#34;句法糖&#34;对于第二个,[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 }
}