2017-08-01 94 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 ++代替即可