The RFC only shows examples with optionals, and Swift, which is the 
inspiration(?) for this only allows it with optionals. I suppose it might also 
be useful in matching e.g. lists.

I didn’t see where the RFC states why special grammar is needed, over a 
closure-like syntax. Just curious.

-Michael

From: Steven Fackler [mailto:sfack...@gmail.com] 
Sent: Sunday, October 12, 2014 11:53 PM
To: Michael Giagnocavo
Cc: Rust-dev@mozilla.org
Subject: Re: [rust-dev] Rationale on if let

`if let` acts on *any* refutable pattern, not just `Option`s. The RFC that 
proposed the syntax is a good place to look for the rationale of why it was 
added: https://github.com/rust-lang/rfcs/pull/160


Steven Fackler

On Sun, Oct 12, 2014 at 10:41 PM, Michael Giagnocavo <m...@giagnocavo.net> 
wrote:
I came across the "if let" syntax, and it's been bothering me a bit.

It seems like a strange thing to elevate to a grammar-level construct.

The example given is:
if let Some(x) = foo() {
    doSomethingWith(x)
}

What's wrong with e.g.:

foo().if_some!(|x| { doSomethingWith(x) })?

Can macros not step in here and allow us to write code that looks like a
closure but doesn't actually create a closure or cost any overhead?
(In fact, is a macro even needed? Couldn't a function and it's function
parameters be marked for inlining - wouldn't that take care of it?) This
seems like a handy thing to have in general. I've written code in other
languages where I want the emitted code to be as if I wrote it as a
single function with branches, but want to express it with lambdas
and function calls.

If neither inlining nor macros can handle this, would it not be better
to improve those features, instead of tacking on odd bits of grammar?

I love more features and expressiveness but "if let" seems like
something that shouldn't be baked into the compiler (even if Swift does it).

I'm honestly asking this question, because the Rust team seems to have
pretty good sense and reasoning, so I'm probably misunderstanding something
and would like to know what I'm missing.

Sincerely,
Michael
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to