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