0 Tage Serie
rust / expert
Snippet

Anpassung des Kurzschluss-Verhaltens über ControlFlow

Das `ControlFlow`-Enum der Standardbibliothek vereinheitlicht Muster zur vorzeitigen Ablaufsteuerung (Break vs. Continue). Es ermöglicht Entwicklern, eigene Traversierungsalgorithmen zu schreiben, die mithilfe des `?`-Operators Abbruchwerte nahtlos weiterleiten, ohne das `Result`- oder `Option`-Enum zweckentfremden zu müssen.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use std::ops::ControlFlow;
struct Node {
val: i32,
children: Vec<Node>,
}
fn search_sum(node: &Node, target: i32, acc: &mut i32) -> ControlFlow<i32, ()> {
*acc += node.val;
if *acc >= target {
return ControlFlow::Break(*acc);
}
for child in &node.children {
search_sum(child, target, acc)?;
}
ControlFlow::Continue(())
}
Erklärung
1
fn search_sum(...) -> ControlFlow<i32, ()> {
Deklariert eine Funktion, die ControlFlow zurückgibt, mit einem Abbruchwert (i32) oder dem Weitermachsignal ().
2
return ControlFlow::Break(*acc);
Löst den vorzeitigen Abbruch aus, indem der Zwischenwert in die Break-Variante verpackt wird.
3
search_sum(child, target, acc)?[...] ;
Nutzt den nativen `?`-Operator, um Break-Werte automatisch in der Rekursionshierarchie nach oben zu leiten.