2016-01-20 73 views
3
// 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 
     } 
    } 

這兩個功能是否做同樣的事情,不是嗎?我可以用同樣的方法使用它們。像這樣:Swift:'Currying'和返回函數的函數有什麼區別?

let incrementFunc = increment(incrementBy: 10) 
var number = 10 
number = incrementFunc(number) 

所以,我很困惑,他們有什麼不同?每種方式的優點是什麼?

+0

只是一個側面說明鑽營將最有可能在斯威夫特的下一個版本中刪除。 – boidkan

回答

5

第一個例子是第二個例子的「語法糖」,類似[Int]Array<Int>的簡寫。他們的意思是一樣的,行爲也一樣。

但是,我應該指出這個語法糖很快就會消失。 This proposal,由Swift編譯器工程師編寫並被Swift開發團隊接受,他說速記currying語法將不再是語言的一部分。相反,所有的咖啡都會按照你的第二個例子的寫法來完成。

+1

基本上,第一個(語法糖)說,「快,請咖喱這個功能_我。」 – matt

1

第一功能2應該是:

func increment(incrementBy x: Int) -> ((Int) ->Int){ 
    func incrementFunc(y: Int) -> Int { 
     return x + y 
    } 
    return incrementFunc 
} 

在這種情況下,函數1 & 2做同樣的事情。 第一個短一點。 第二個似乎更清晰的意圖。

你也可以我們功能3,它是短而明確:

func increment(incrementBy x: Int) -> ((Int) ->Int){ 
    return { y in return x + y } 
} 
相關問題