pub struct Arm { /* private fields */ }Expand description
One arm of a match: a pattern, and whether the arm has a guard.
A guard is treated as possibly failing: a guarded arm never makes later arms unreachable and never counts toward exhaustiveness, but it is itself reachable whenever a value matching its pattern can get past the earlier unguarded arms. With an or-pattern, the guard is assumed to be tried again for each alternative that matches, so alternatives of a guarded arm never make each other redundant.
§Examples
use match_lang::{Arm, Pat};
let plain = Arm::new(Pat::wild());
let guarded = Arm::guarded(Pat::int(0));
assert!(!plain.is_guarded());
assert!(guarded.is_guarded());
assert_eq!(guarded.pat().to_string(), "0");Implementations§
Source§impl Arm
impl Arm
Sourcepub fn new(pat: Pat) -> Arm
pub fn new(pat: Pat) -> Arm
An arm without a guard.
§Examples
use match_lang::{Arm, Pat};
let arm = Arm::new(Pat::bool(true));
assert!(!arm.is_guarded());Sourcepub fn guarded(pat: Pat) -> Arm
pub fn guarded(pat: Pat) -> Arm
An arm with a guard (pat if condition). The condition itself is not
analysed.
§Examples
use match_lang::{Arm, Pat};
let arm = Arm::guarded(Pat::wild());
assert!(arm.is_guarded());Sourcepub fn pat(&self) -> &Pat
pub fn pat(&self) -> &Pat
The arm’s pattern.
§Examples
use match_lang::{Arm, Pat};
assert_eq!(Arm::new(Pat::int(3)).pat().to_string(), "3");Sourcepub fn is_guarded(&self) -> bool
pub fn is_guarded(&self) -> bool
Whether the arm has a guard.
§Examples
use match_lang::{Arm, Pat};
assert!(Arm::guarded(Pat::wild()).is_guarded());Trait Implementations§
Auto Trait Implementations§
impl Freeze for Arm
impl RefUnwindSafe for Arm
impl Send for Arm
impl Sync for Arm
impl Unpin for Arm
impl UnsafeUnpin for Arm
impl UnwindSafe for Arm
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more