带有简短语句的 while 循环
While loop with a short statement
我是 Go 的新手,我已经有过几次想要使用带有简短语句的 while 循环之类的东西(请参见下面的示例)。这样的事情可能吗?我很确定一定有一些简单的方法可以做到这一点,但我无法在互联网上找到任何东西。
示例:
(注意:我知道 Go 不支持这些示例中的语法,我只是使用与 if with a short statement 中相同的语法来说明我的问题)
// pop from queue until it returns nil
for val := queue.Pop(); val != nil {
}
// scan numbers until EOF (enough to check if err is nil for competitive programming)
var n int
for _, err := fmt.Scan(&n); err != nil {
}
没有完全按照您的意愿行事的语法,但有一些选项可以相对简洁地表达您的意图。
要么将声明移到 for 循环中:
for {
val := queue.Pop()
if val == nil { break }
...
}
或者您复制表达式:
for val := queue.Pop(); val != nil; val = queue.Pop() {
...
}
或者你以不同的方式表达循环条件(我猜 queue
在这里,使用 len
可能不是确定队列是否为空的正确方法,具体取决于你的队列类型是什么)。
for len(queue) > 0 {
val := queue.Pop()
...
}
我是 Go 的新手,我已经有过几次想要使用带有简短语句的 while 循环之类的东西(请参见下面的示例)。这样的事情可能吗?我很确定一定有一些简单的方法可以做到这一点,但我无法在互联网上找到任何东西。
示例:
(注意:我知道 Go 不支持这些示例中的语法,我只是使用与 if with a short statement 中相同的语法来说明我的问题)
// pop from queue until it returns nil
for val := queue.Pop(); val != nil {
}
// scan numbers until EOF (enough to check if err is nil for competitive programming)
var n int
for _, err := fmt.Scan(&n); err != nil {
}
没有完全按照您的意愿行事的语法,但有一些选项可以相对简洁地表达您的意图。
要么将声明移到 for 循环中:
for {
val := queue.Pop()
if val == nil { break }
...
}
或者您复制表达式:
for val := queue.Pop(); val != nil; val = queue.Pop() {
...
}
或者你以不同的方式表达循环条件(我猜 queue
在这里,使用 len
可能不是确定队列是否为空的正确方法,具体取决于你的队列类型是什么)。
for len(queue) > 0 {
val := queue.Pop()
...
}