在 Go for 循环的 post 部分中分配如何允许此循环退出?

我正在阅读“The Go Programming Language”一书,并在第 5 章中遇到了一个不寻常的 for 循环语法。我已经删减了下面的示例,但整个程序都在本书的 GitHub 页面上。


type Node struct {

    int                     NodeType

    FirstChild, NextSibling *Node

}


func visit(n *Node) {

  for c:= n.FirstChild; c != nil; c = c.NextSibling {

    visit(c)

  }

}

我脑海中的 C 解析器告诉我,它c.NextSibling总是指向 aNode或 be nil。在那种情况下,循环要么总是中断,要么永远继续。

c.NextSibling不是时nil,似乎循环正在退出,因为循环值与上一次迭代相同,但我在 Go语言规范中找不到任何东西来支持它。

我已经编译了那个程序并确认它按照书上的那样工作。

我错过了一些基本的东西还是这里发生了其他事情?


LEATH
浏览 74回答 1
1回答

人到中年有点甜

当c.NextSibling不为 nil 时,似乎循环正在退出,因为循环值与上一次迭代相同不确定你的意思,但是是的,你误解了一些东西。但是for循环不是罪魁祸首。当它的继续条件仍然为真时,它肯定不会退出。type Node struct {    NodeId                  int    FirstChild, NextSibling *Node}func visit(n *Node) {    for c := n.FirstChild; c != nil; c = c.NextSibling {        fmt.Printf("seeing node %d\n", c.NodeId)        visit(c)    }}func main() {    c3 := &Node{NodeId: 4}    c2 := &Node{NodeId: 3, NextSibling: c3}    c1 := &Node{NodeId: 2, NextSibling: c2}    root := &Node{NodeId: 1, FirstChild: c1}    visit(root)}输出seeing node 2seeing node 3seeing node 4
打开App,查看更多内容
随时随地看视频慕课网APP