2015-12-08 34 views
4

剛剛在Linux中安裝Swift來檢查它。在未來的新語句中使用Swift嗎?

嘗試一個currying的小例子會導致警告:currying的語法將在未來發生變化,但是我找不到有關這個新語法的內容。

的鑽營的例子,我試過:

func do_stuff(x: Int) (y: Int) (z: Int) -> Int { 
    return (x - y) * z 
} 
let curry_fun = do_stuff(42) 
let x = curry_fun(y: 7)(z: 3) 

編譯在以下警告這個例子的結果:

warning: curried function declaration syntax will be removed in a future version of Swift; use a single parameter list 
func do_stuff(x: Int) (y: Int) (z: Int) -> Int { 
      ^~~~~~~~~~~~~~~~~~~~~~~~~~ 
        ,  , 

那麼,是什麼討好然後像在未來迅速?

我也嘗試像func do_stuff(x: Int, y: Int, z: Int) -> Int...,但是我無法找到一個方法來做到與功能柯里..

回答

17

只有聲明語法將被刪除,例如, func(a: Int)(b:Int) -> Int

func curry(a: Int)(b: Int) -> Int { 
    return a + b 
} 

等同於:

func newCurry(a: Int) -> (b: Int) -> Int { 
    return { b in 
     return a + b 
    } 
} 
2

據我瞭解,他們計劃完全刪除。

下面是從swift-evolution github repository報價:

咖喱函數聲明語法FUNC foo(x: Int)(y: Int)用處有限的,並創建了許多語言和實施的複雜性。我們應該刪除它。

+0

所以未來的swift不會支持currying嗎?..那個太爛了:( – Michelrandahl

+0

啊,我看他們正在考慮一個替代語法以及..我希望這就是他們最終做的..不管怎麼說,謝謝你的解釋:) – Michelrandahl

+1

@Mitzh,是的,它仍然是一個「提案」(儘管已被接受),所以如果你認爲自己有很好的用例或想法,那麼如何改善這種情況,那麼[該存儲庫中的另一個頁面](https:// github .com/apple/swift-evolution/blob/master/process.md),它解釋了你如何影響決策。 – courteouselk

-1

咖喱函數聲明語法已在Swift3被刪除,我們應該使用參數列表來代替。

+0

爲什麼倒投了?這是最新的解決方案。 – zhongwuzw