"Robert Clipsham" <[email protected]> wrote in message news:[email protected]... > Long Chang wrote: >> class RegExp >> { >> enum Option{ >> X, Y, Z >> } >> int options; >> this(int options = 0){ this.options = options; } >> } >> >> void main(){ >> auto reg = new RegExp("^A.", .Option( X |Y|Z ) ); >> assert( RegExp .Option.X | RegExp .Option.Y| RegExp .Option.Z == >> reg.options ); >> } > > ---- > class Foo > { > enum Option > { > X = 2, > Y = 4, > Z = 8 > } > int options; > this(int opts = 0) > { > options = opts; > } > } > > void main() > { > Foo foo; > with( foo.Option ) > { > foo = new Foo( X | Y | Z ); > assert( X | Y | Z == foo.options ); > } > } > ---- > > Is this the kind of thing you're looking for? That looks nicer than your > proposed syntax in my opinion :)
Maybe what would be good is an expression version of with: foo = new Foo( with(Foo.Option)( X | Y | Z ) ); assert( with(Foo.Option)( X | Y | Z ) == foo.options ); Although I think I still prefer something closer to Long Chang's version, which is maybe less general but easier to read because it's less verbose and less paren-happy: foo = new Foo( Foo.Option( X | Y | Z ) ); assert( Foo.Option( X | Y | Z ) == foo.options ); Come to think of it though, I think my favorite is still making the "Foo.Option." optional wherever a Foo.Option is expected. But, I'd consider anything (except the Haxe-style approach of polluting the namespace with all of the unqualified enum values - I *hate* when languages do that) to be a very welcome improvement.
