在 Fri, 17 Apr 2009 21:44:09 +0800,Leandro Lucarella <llu...@gmail.com>
写道:
davidl, el 17 de abril a las 14:31 me escribiste:
After tweaking dmd a bit litte, i get the dotexp overloading work.
The following is the test code:
import std.stdio;
class c
{
B opDotExp(char[] methodname,...)
{
writefln("god it works ", methodname);
return new B();
}
void opAdd(int j)
{
}
void test()
{
}
}
class a:c
{
}
class B
{
int i;
B opAssign(int k){
i=k;
return this;
}
}
char[] v1;
void func(char[] v, ...){}
void main()
{
a v=new a;
v.test();
v.dynamicmethod(3,4);
//v.qq = 5;
writefln((v.qq = 5).i);
}
it generates the output:
god it works dynamicmethod
god it works qq
5
Any comments? Do you like this feature?
This is awsome indeed. I'd love to see it in the specs. The suggestion of
making opDotExp a template it's good one too. I guess that now that opDot
is replaced by alias this, opDot can be used for this instead of
opDotExp.
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()?
Thanks for the great job.
Thanks, the example here v.qq returns a B object, and then the assignment
kicks in, therefore it calls B.opAssign(5), thus the i member of that B
instance is 5.
--
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/