diff --git a/library/core/src/ops/control_flow.rs b/library/core/src/ops/control_flow.rs index ec00d0fe05b9c..776cea2ef791f 100644 --- a/library/core/src/ops/control_flow.rs +++ b/library/core/src/ops/control_flow.rs @@ -24,7 +24,7 @@ use crate::{convert, ops}; /// ``` /// /// A basic tree traversal: -/// ```no_run +/// ``` /// use std::ops::ControlFlow; /// /// pub struct TreeNode { @@ -34,7 +34,7 @@ use crate::{convert, ops}; /// } /// /// impl TreeNode { -/// pub fn traverse_inorder(&self, f: &impl Fn(&T) -> ControlFlow) -> ControlFlow { +/// pub fn traverse_inorder(&self, f: &mut impl FnMut(&T) -> ControlFlow) -> ControlFlow { /// if let Some(left) = &self.left { /// left.traverse_inorder(f)?; /// } @@ -44,30 +44,32 @@ use crate::{convert, ops}; /// } /// ControlFlow::Continue(()) /// } +/// fn leaf(value: T) -> Option>> { +/// Some(Box::new(Self { value, left: None, right: None })) +/// } /// } /// /// let node = TreeNode { /// value: 0, -/// left: Some(Box::new(TreeNode { -/// value: 1, -/// left: None, -/// right: None -/// })), +/// left: TreeNode::leaf(1), /// right: Some(Box::new(TreeNode { -/// value: 2, -/// left: None, -/// right: None +/// value: -1, +/// left: TreeNode::leaf(5), +/// right: TreeNode::leaf(2), /// })) /// }; +/// let mut sum = 0; /// -/// node.traverse_inorder(& |val| { -/// println!("{}", val); -/// if *val <= 0 { -/// ControlFlow::Break(()) +/// let res = node.traverse_inorder(&mut |val| { +/// if *val < 0 { +/// ControlFlow::Break(*val) /// } else { +/// sum += *val; /// ControlFlow::Continue(()) /// } /// }); +/// assert_eq!(res, ControlFlow::Break(-1)); +/// assert_eq!(sum, 6); /// ``` #[stable(feature = "control_flow_enum_type", since = "1.55.0")] #[derive(Debug, Clone, Copy, PartialEq)]