Can we have this Syntactic sugar.

Steven Schveighoffer schveiguy at yahoo.com
Tue Nov 24 08:27:39 PST 2009


On Tue, 24 Nov 2009 10:44:45 -0500, Robert Clipsham  
<robert at octarineparrot.com> wrote:

> 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 :)

Forgetting about the assert, you don't like this one-liner?

auto foo = new Foo(Foo.Option(X | Y | Z));

I think we can even make the Foo go away, I think Java does something like  
that.

compared to your version (without assert):

Foo foo;
with(foo.Option) foo = new Foo(X | Y | Z);

-Steve



More information about the Digitalmars-d mailing list