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 <mari...@gmail.com>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 > 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