Fully dynamic d by opDotExp overloading

Steven Schveighoffer schveiguy at yahoo.com
Fri Apr 17 07:24:04 PDT 2009


On Fri, 17 Apr 2009 09:44:09 -0400, Leandro Lucarella <llucax at gmail.com>  
wrote:

> I don't fully understand the example though. In writefln((v.qq = 5).i),
> how is that B.i is assigned to 5 if the opDotExp("qq", 5) don't propagate
> the 5 to the new B()?

I think it translates to

opDotExp("qq") = 5

Without knowing the signature of qq, how is the compiler supposed to infer  
that it is a property?  In fact, I think this might be a limitation of  
this syntax, you can't define dynamic properties.

I for one, can't really see a huge benefit, but then again, I don't  
normally work with dynamic-type langauges.  It looks to me like a huge  
hole that the compiler will ignore bugs that would have been caught if the  
methods were strongly typed:

class c
{
   void opDotExp(char[] methodname,...)
   {
      if(methodname == "mymethod")
         callMyMethod();
      else
         throw new Exception("bad method name: " ~ methodname);
   }
}

void foo(c myc, bool rarelySetToTrue)
{
   if(rarelySetToTrue)
     myc.mymethud(); // compiles, will throw runtime exception
}

Also, how do you overload the return value?  Using this proposal, you  
can't have different dynamic methods that return different types.

-Steve



More information about the Digitalmars-d mailing list