From 7013698a47a42134d07ff254c9ef1070891b3d00 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 5 Jun 2014 16:11:34 -0700 Subject: [PATCH 1/3] Add a is_match!(expr, pattern) macro. --- src/libstd/macros.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index 4db15d2cbbe0b..6acac4169eb99 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -322,6 +322,14 @@ macro_rules! vec( ($($e:expr),+,) => (vec!($($e),+)) ) +/// Return whether the given expression matches the given pattern, as a bool. +#[macro_export] +macro_rules! is_match( + ($e: expr, $($p:pat)|*) => (match $e { + $($p: pat)|+ => true, + _ => false + }); +) /// A macro to select an event from a number of receivers. /// From cc30a3a5277e1b49a8cfed9d5d15c8c2160b517f Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 6 Jun 2014 12:17:04 +0100 Subject: [PATCH 2/3] Rename is_match!() to matches!() and add an example. --- src/libstd/macros.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index 6acac4169eb99..8f522a8b24ad5 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -322,9 +322,19 @@ macro_rules! vec( ($($e:expr),+,) => (vec!($($e),+)) ) -/// Return whether the given expression matches the given pattern, as a bool. +/// Return whether the given expression matches the given patterns. +/// +/// # Example +/// +/// ``` +/// let input: &str = /* ... */; +/// if !input.is_empty() && matches!(input.char_at(0), '+' | '-') +/// && matches!(input.char_at(1), '0'..'9') { +/// // Parse signed number +/// } +/// ``` #[macro_export] -macro_rules! is_match( +macro_rules! matches( ($e: expr, $($p:pat)|*) => (match $e { $($p: pat)|+ => true, _ => false From bde059dc3eb54da035489e6d7ac0fdb2309c7852 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 27 Jun 2014 15:22:34 +0100 Subject: [PATCH 3/3] Add guard support in matches!() --- src/libstd/macros.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index 8f522a8b24ad5..b9da6747e8096 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -335,10 +335,18 @@ macro_rules! vec( /// ``` #[macro_export] macro_rules! matches( - ($e: expr, $($p:pat)|*) => (match $e { - $($p: pat)|+ => true, - _ => false - }); + ($expression: expr, $($pattern:pat)|*) => ( + match $expression { + $($pattern: pat)|+ => true, + _ => false + } + ); + ($expression: expr, $($pattern:pat)|* if $guard: expr) => ( + match $expression { + $($pattern: pat)|+ if $guard => true, + _ => false + } + ); ) /// A macro to select an event from a number of receivers.