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