2014-06-17 157 views
10

我想做一個嵌套的遞歸函數,但是當我編譯時,編譯器崩潰(分段錯誤)。swift嵌套遞歸函數

這裏是我的代碼:

func test() 
{ 
    func inner(val : Int) 
    { 
     println("\(val)") 
     if val > 0 
     { 
      inner(val - 1) 
     } 
    } 
    inner(3) 
} 

,編譯器日誌are here

+1

對我來說看起來像一個bug –

+1

是的,提交一個錯誤報告,編譯器不應該崩潰:p – Jack

+0

我知道編譯器不應該崩潰,但是因爲它是beta版本,所以語法錯誤會導致這種錯誤。我的問題是:我的代碼中是否有語法錯誤?有沒有像OCaml中的'rec'關鍵字? – Morniak

回答

17

有趣......好像也許它想逃試圖捕捉到inner參考已經被定義之前,是什麼時候?

以下修復它爲我們:

func test() { 
    var inner: (Int) ->() = { _ in } // give it a no-op definition 
    inner = { val in 
     println("\(val)") 
     if val > 0 { 
      inner(val - 1) 
     } 
    } 
    inner(3) 
} 
當然沒有嵌套

我們沒有在所有的,例如任何問題以下作品完全如預期:

func test(val: Int) { 
    println("\(val)") 
    if val > 0 { 
     test(val - 1) 
    } 
} 
test(3) 

我會說:舉報吧!

+0

修復不是真的'性感',但它執行等待官方修復的工作。謝謝 ! – Morniak

+0

聲明數組時,不能在此解決方案中對它們進行變異。如何正確地聲明它們? – EridB