ラベル付き loop とラベル付き break
Rustで、ループにラベルをつけておくことができる ループをネストさせる場合に、どのレベルでbreakしたいか等を簡単に制御できる
これを使わない場合はフラグ変数とかを用意してループの状態を管理する必要がある
(「ラベル付き loop とラベル付き break」が一般的な名称かどうかはわからないlemonadern.icon)
下はAST的なものを深さ優先探索する例
code:nested_loop.rs
'traverse: loop { // ラベル付き loop
if cursor.node().child_count() == 0 {
text_buf.push_str(&format!("{}\n", cursor.node().range()));
}
if cursor.goto_first_child() {
} else if cursor.goto_next_sibling() {
} else {
loop { // 内側のループ
if !cursor.goto_parent() {
break 'traverse; // ラベル付き break
}
if cursor.goto_next_sibling() {
break; // 普通の(内側に作用する) break
}
}
}
}
参考