Go 中 0 到 1 之间迭代的方法

问题描述 投票:0回答:1

以下代码将永远打印

0
1

package main

import "fmt"

func main() {
    i := 0
    for {
        i = 1 - i           // special effect, `i = one minus i` 
        fmt.Println(i).     // will always result in 1 or 0 when
    }                       // i starts out as a 1 or 0
}

以下是我发现的产生此类迭代的另一种方法:

func loop(i int) {
    for ; twoThings[i] != x.ActiveThing; loop(1 - i) {
        twoThings[i].ChangeThings()
    }
}

有更简洁的方法吗?我知道 Go 有

iota
但我不认为它可以像这样工作。

loops go infinite-loop
1个回答
0
投票

我不确定这里的目标是什么。根据“简洁”的含义,答案可以是“是”、“否”或“视情况而定”。 :)

在你的第二个例子中,你引入了与循环分开的符号,所以看起来你的目标是孤立地循环(或

main()
)的简洁性,而不是整体解决方案。

但是,第二个例子也不能与第一个例子直接比较。第一个是完整的程序,而第二个是需要额外调用代码的函数。

因此,我将其作为第一个示例(即完整程序)的直接可比替代方案,从第二个示例中获取线索,将代码移出循环并移入单独的包函数和变量中:

package main

var i int = 0
func result() int { i = 1 - i; return i }

func main() {
    for {
        println(result())
    }
}

忽略不可执行的

import "fmt"
的消除,就LOC而言,整体解决方案并不比最初的示例更简洁,但是当单独考虑时,
main()
函数和循环代码是(单独或一起)。

© www.soinside.com 2019 - 2024. All rights reserved.