I agree that is a macro like your `if_matches` examples were possible, it
would be a reasonable solution, including conferring the right scope for
`a` and `b`.

It is completely unclear to me how to implement it though. What does
"use_more_macros line" mean?

Thanks,

Oren.



On Mon, Sep 23, 2013 at 2:06 PM, Huon Wilson <[email protected]> wrote:

>  On 23/09/13 20:52, Jason Fager wrote:
>
> Doesn't seem like enough bang for the buck to me.  In your first example you
> save 3 vertical lines but get a really wide one in return, and lose some 
> indentation
> levels but add more syntax and conceptual overhead to the language.
>
>  Might be my lack of imagination, but the feature doesn't seem to expand
> out to many other use cases, either.
>
>  Your second case you could write as:
>
>  let foo = get_option("foo");
> let bar = get_option("bar");
> if foo.is_some() && bar.is_some() {
>      use(foo.unwrap(), bar.unwrap());
> }
>
>
> It's also possible to write a `matches` macro:
>
>   macro_rules! matches {
>       ($e:expr ~ $($p:pat)|*) => {
>           match $e {
>               $($p)|* => true,
>               _ => false
>           }
>       }
>   }
>
>   fn main() {
>       let a = Some(1);
>       let b = Some(2);
>
>       if matches!((a,b) ~ (Some(_), Some(_))) {
>           println("whatever");
>       }
>   }
>
> (This has the drawback that accidentally (or otherwise) using a pattern
> that always matches, e.g. `matches!((a,b) ~ (_,_))` gives a error message
> about the `_ => false` arm being unreachable, which isn't particularly
> intuitive.)
>
> Following the use-more-macros line, one could modify the above to give
> something like
>
>   if_matches!(foo ~ (Some(a), Some(b)) => {
>       // use a, b
>   })
>
> by adding an $expr argument to use instead of `true` and replacing the
> false arm with `{}`. Note: this *may* break when match-var-hygiene is
> implemented (https://github.com/mozilla/rust/issues/9384), I'm not sure.
>
> Huon
>
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to