On Sunday, 15 December 2013 at 02:03:09 UTC, bearophile wrote:
I think I'd like with() to not create a scope, just like the "static if". So you could write this code:


enum Foo { A, B }
auto x1 = Foo.A;
auto x2 = Foo.B;
void main() {
    import std.stdio;
    immutable data = [Foo.A, Foo.B];
    data.writeln;
}



Like this, where "with(Foo)" is usable at module scope, and it can be used to define an immutable and keep it visible later for the writeln:


enum Foo { A, B }
with (Foo) {
    auto x1 = A;
    auto x2 = B;
}
void main() {
    import std.stdio;
    with (Foo) {
        immutable data = [A, B];
    }
    data.writeln;
}


Assuming the current design of with() can't change, I think a "static with" could be used...


enum Foo { A, B }
static with (Foo) {
    auto x1 = A;
    auto x2 = B;
}
void main() {
    import std.stdio;
    static with (Foo) {
        immutable data = [A, B];
    }
    data.writeln;
}


Bye,
bearophile

I don't think `static` would be a good syntax here. `static` in D means either "belongs to the global\thread lifetime instead of the object/function lifetime" or "performed at compile-time". It's bad enough we have two meanings for the same keyword, but at least `static` is a good description for both of them. `static` does not describe well the idea of "not creating a new scope", and I don't think it's a good idea to overload another meaning on it and make it a whore keyword...

Reply via email to