| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
May 10, 2008 Forbid the use of method name "init" | ||||
|---|---|---|---|---|
| ||||
"init" and other class properties are kind of shadow-keywords.
class MyClass{
void init(){
}
}
The class is fine and can be used.
Now someone attempts to insert this class into a container....
template Templ(T){
T t = T.init; // Compile error
}
The compiler should forbid the use of the method name "init", if the signature does not make any sense for an "init" property. It must be a static method, with a return value and no arguments.
| ||||
May 10, 2008 Re: Forbid the use of method name "init" | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Frank Benoit | "Frank Benoit" <keinfarbton@googlemail.com> wrote in message news:g052dt$qt4$1@digitalmars.com... > "init" and other class properties are kind of shadow-keywords. > > class MyClass{ > void init(){ > } > } > > The class is fine and can be used. > Now someone attempts to insert this class into a container.... > > template Templ(T){ > T t = T.init; // Compile error > } > > The compiler should forbid the use of the method name "init", if the signature does not make any sense for an "init" property. It must be a static method, with a return value and no arguments. This should extend to any semi-reserved name. The compiler used to allow redefinition of 'sizeof' and 'offsetof' but checks were added to disallow that. That mechanism should just be extended. | |||
May 11, 2008 Re: Forbid the use of method name "init" | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | 在 Sun, 11 May 2008 05:46:57 +0800,Jarrett Billingsley <kb3ctd2@yahoo.com> 写道: > "Frank Benoit" <keinfarbton@googlemail.com> wrote in message > news:g052dt$qt4$1@digitalmars.com... >> "init" and other class properties are kind of shadow-keywords. >> >> class MyClass{ >> void init(){ >> } >> } >> >> The class is fine and can be used. >> Now someone attempts to insert this class into a container.... >> >> template Templ(T){ >> T t = T.init; // Compile error >> } >> >> The compiler should forbid the use of the method name "init", if the >> signature does not make any sense for an "init" property. It must be a >> static method, with a return value and no arguments. > > This should extend to any semi-reserved name. The compiler used to allow > redefinition of 'sizeof' and 'offsetof' but checks were added to disallow > that. That mechanism should just be extended. > > I filed a bug of forbiding the use of stringof method. But it's markd as invalid :( http://d.puremagic.com/issues/show_bug.cgi?id=1412 -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ | |||
May 27, 2008 Re: Forbid the use of method name "init" | ||||
|---|---|---|---|---|
| ||||
Posted in reply to davidl | davidl@126.com wrote: > ÔÚ Sun, 11 May 2008 05:46:57 +0800£¬Jarrett Billingsley <kb3ctd2@yahoo.com> дµÀ: > >> "Frank Benoit" <keinfarbton@googlemail.com> wrote in message >> news:g052dt$qt4$1@digitalmars.com... >>> "init" and other class properties are kind of shadow-keywords. >>> >>> class MyClass{ >>> void init(){ >>> } >>> } >>> >>> The class is fine and can be used. >>> Now someone attempts to insert this class into a container.... >>> >>> template Templ(T){ >>> T t = T.init; // Compile error >>> } >>> >>> The compiler should forbid the use of the method name "init", if the >>> signature does not make any sense for an "init" property. It must be a >>> static method, with a return value and no arguments. >> >> This should extend to any semi-reserved name. The compiler used to allow >> redefinition of 'sizeof' and 'offsetof' but checks were added to disallow >> that. That mechanism should just be extended. >> >> > > I filed a bug of forbiding the use of stringof method. But it's markd as invalid :( > http://d.puremagic.com/issues/show_bug.cgi?id=1412 > I've added my reasoning to that bug report. I guess one could make a case for redefining 'init', but as for 'stringof', it should be the same as 'sizeof' and 'offsetof': unextendable, like Jarret mentioned. -- Bruno Medeiros - Software Developer, MSc. in CS/E graduate http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply