Now that I sent the mail, I'm already second guessing this suggestion. It introduces an asymmetry in that new variable names can be introduced in an `alt` block without a `let` prefix, but not in a normal assignment (in a normal assignment). And I'm sure Dave will point out that much better solutions exist to avoid having macros capture outside names.
On Sat, Dec 24, 2011 at 5:45 AM, Niko Matsakis <[email protected]> wrote: > What about "disallow shadowing unless you use the `let` keyword"? > Sometimes shadowing is nice and sometimes (think macros) you want to use a > name and know its meaning without regard to existing exterior bindings. > > So you could write: > > let a = ...; > let b = ...; > alt foo { > bar(a, let b) { ... } > } > > this would match a `bar` whose first argument is equal to `a` and with any > second argument. > > We could also allow the `let` to be used at different levels: > > alt foo { > let bar(a, b) { ... } > } > > This would also allow `let x = y;` to continue shadowing bindings. We > could also then permit things like: > > (a, let b) = ...; > > which I think Marijn was asking for a while back. After having hacked > trans for a while, I can see why! I'm always writing: > > let foo = trans_this_or_that(); > bcx = foo.bcx; > > and it would be nicer to write: > > (bcx, let val) = trans_this_or_that(); > > > Niko > > > On Fri, Dec 23, 2011 at 12:00 PM, Marijn Haverbeke <[email protected]>wrote: > >> > Yeah. One thing that concerns me about that is that it means we lose the >> > ability to write rebind-the-variable functional-style code: >> >> Oh. You'd make this apply to irrevocable patterns as well? Or do you >> intend to get rid of the restriction that let patterns are >> irrevocable? >> >> In the second case, I think I'd prefer a 'you can shadow anything, >> except consts and tag variants' rule to a blanket 'no shadowing' one. >> _______________________________________________ >> 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
