2017-08-01 93 views
0

循環循環,當我通過函數增加i,但沒有通過i++帶函數調用的無限循環

package main 

import "fmt" 

func increment(i int) (int) { 
    i++ 
    return i 
} 

func condition_true(i int) (bool) { 
    if i < 10 { 
     return true 
    } else { 
     return false 
    } 
} 

func main() { 
    for i := 1; condition_true(i); increment(i) { 
     fmt.Println(i) 
    } 
} 

compiler to play around

回答

6

你應該做i = increment(i)

否則,循環中使用的i未被修改。

for i := 1; condition_true(i); i = increment(i) { 
    fmt.Println(i) 
} 

那個可以像你期望的那樣工作。

https://play.golang.org/p/dwHbV1iY0_

可替換地,允許increment通過接收指向它的指針到修改i

func increment(i *int) { 
    *i++ 
} 

然後在循環中使用這樣的:

for i := 1; condition_true(i); increment(&i) { 
    fmt.Println(i) 
} 
3

這是發生因爲增量函數實際上並沒有改變i值,因爲i是通過值傳遞給函數的。

只需刪除for循環中的增量並用i ++代替即可