On Fri, 17 Apr 2009 09:44:09 -0400, Leandro Lucarella <llu...@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

Reply via email to