2014-06-28 72 views
0

我得到的錯誤:var變量上的不可變數組?

類型的永恆價值「點陣字符>」名稱removeAtIndex()的僅具有突變成員

數組應具有的內容,因爲這removeAtIndex線是在一個循環中誰的條件是如果計數> 1

func evaluatePostFix(expression:Array<Character>) -> Character 
{ 
    var stack:Array<Character> = [] 
    var count = -1 // Start at -1 to make up for 0 indexing 

    if expression.count == 0 { 
     return "X" 
    } 

    while expression.count > 1 { 
     if expression.count == 1 { 
      let answer = expression[0] 
      return answer 
     } 

     var expressionTokenAsString:String = String(expression[0]) 
     if let number = expressionTokenAsString.toInt() { 
      stack.append(expression[0]) 
      expression.removeAtIndex(0) 
      count++ 
     } else { // Capture token, remove lefthand and righthand, solve, push result 
      var token = expression(count + 1) 
      var rightHand = stack(count) 
      var leftHand = stack(count - 1) 
      stack.removeAtIndex(count) 
      stack.removeAtIndex(count - 1) 
      stack.append(evaluateSubExpression(leftHand, rightHand, token)) 
     } 
    } 
} 

任何人有任何想法,爲什麼這是?謝謝!

+0

請出示完整的代碼。 –

回答

1

因爲所有函數參數都作爲「let」被隱式地傳遞,因此在函數內是不變的,不管它們在函數之外。

要修改的功能(這不會影響的價值迴歸)中的值,你可以明確地使用VAR:

func evaluatePostFix(var expression:Array<Character>) -> Character { 
... 
} 
+1

請注意,只有有時通過引用傳遞數組的錯誤語義意味着,如果您不更改表達式的長度,而只是更改值(即使數組聲明爲let,您也可以執行此操作),則調用者將會查看更改。 –

+0

謝謝你的工作!我很感激! – Brejuro

+2

不要忘記接受你的問題的答案。 –