December 27, 2007 Proposal:better COM support and DB support? | ||||
---|---|---|---|---|
| ||||
The idea is compile time convert DotExp to a String. consider: class COMBase { Variant opDotExp(string field) { //do shit with COM } } COMBase mycominst; mycominst.kk(); <-- this would actually result code mycominst.opDotExp("kk()") by the compiler I don't quite like the syntax of mycominst.Call_My_COM_Method("Method_Name", ...) and consider: abstract class FieldClass { Variant k; int opImplicitCastTo(){ throw new Exception("this is not an int field");}; float opImplicitCastTo(){throw new Exception("this is not a float field");}; double opImplicitCastTo(){throw new Exception("this is not a double field");}; string opImplicitCastTo(){throw new Exception("this is not a string field");}; } class MyIntField:FieldClass { int opImplicitCastTo(){ return k.toInt;} this (Variant t){k = t;} } class MyTable { FieldClass opDotExp(string field) // compiler only comes to this when compiler fails to match any DotExp { Variant t; // get field from database and put it to variant t. static if (field == "MyIntField") return new MyIntField(t); else static if (field == "MyFloatField") return new MyFloatField(t); // a similar helper class like MyIntField would be required else static if (field == "MyDoubleField") return new MyDoubleField(t); // a similar helper class like MyIntField would be required else static assert(0); // this operator should end with static assert(0); } } MyTable table; table.MyIntField = 3; // this would result actually a MyIntField object and if programmer implement the opAssign of MyIntField class, then it would be possible for programmer to handle database in a very nice language integrated syntax. Yes, string mixin can handle it very well. But I still like the LINQ syntax. So compile-time DotExp to a string would bring us two things very nice. 1.better COM syntax. 2.LINQ syntax available. -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ |
December 27, 2007 Re: Proposal:better COM support and DB support? | ||||
---|---|---|---|---|
| ||||
Posted in reply to davidl | 在 Thu, 27 Dec 2007 15:43:44 +0800,davidl <davidl@126.com> 写道: > The idea is compile time convert DotExp to a String. > > consider: > class COMBase > { > Variant opDotExp(string field) > { > //do shit with COM > } > } > > COMBase mycominst; > mycominst.kk(); <-- this would actually result code mycominst.opDotExp("kk()") by the compiler > > I don't quite like the syntax of mycominst.Call_My_COM_Method("Method_Name", ...) > > and consider: > > abstract class FieldClass > { > Variant k; > int opImplicitCastTo(){ throw new Exception("this is not an int field");}; > float opImplicitCastTo(){throw new Exception("this is not a float field");}; > double opImplicitCastTo(){throw new Exception("this is not a double field");}; > string opImplicitCastTo(){throw new Exception("this is not a string field");}; > } > > class MyIntField:FieldClass > { > int opImplicitCastTo(){ return k.toInt;} > this (Variant t){k = t;} > } > > class MyTable > { > FieldClass opDotExp(string field) // compiler only comes to this when compiler fails to match any DotExp > { > Variant t; > // get field from database and put it to variant t. > static if (field == "MyIntField") > return new MyIntField(t); > else static if (field == "MyFloatField") > return new MyFloatField(t); // a similar helper class like MyIntField would be required > else static if (field == "MyDoubleField") > return new MyDoubleField(t); // a similar helper class like MyIntField would be required > else > static assert(0); // this operator should end with static assert(0); > } > } > > > MyTable table; > table.MyIntField = 3; // this would result actually a MyIntField object and if programmer implement the opAssign of MyIntField class, then it would be possible for programmer to handle database in a very nice language integrated syntax. > > Yes, string mixin can handle it very well. But I still like the LINQ syntax. > > So compile-time DotExp to a string would bring us two things very nice. > 1.better COM syntax. > 2.LINQ syntax available. > Oh, I'm confused by ADO and LINQ. the LINQ object like field is actually a class binding. and LINQ select blah syntax is evil. I'm not particularly enjoy it. My proposal only do good for not-binded COM object. People can do quick hack in binded syntax. -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ |
Copyright © 1999-2021 by the D Language Foundation