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.