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...
