我正在阅读“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语言规范中找不到任何东西来支持它。我已经编译了那个程序并确认它按照书上的那样工作。我错过了一些基本的东西还是这里发生了其他事情?
1 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
当
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 2
seeing node 3
seeing node 4
- 1 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消