Static method conflicts with non-static method?
Steven Schveighoffer
schveiguy at yahoo.com
Fri Apr 27 06:46:54 PDT 2012
On Fri, 27 Apr 2012 09:15:31 -0400, so <so at so.so> wrote:
> On Friday, 27 April 2012 at 12:35:53 UTC, Steven Schveighoffer wrote:
>
>> Huh? The main reason of confusion is that the static method is named
>> in such a way that it looks like an instance method. So we prevent
>> that, unless the author of the class (who is deciding the name of the
>> function) deems it should be called on instances
>>
>> example:
>>
>> struct File
>> {
>> static File open(string name) {...} // factory method
>> this(string name);
>> }
>>
>> File f = File("hello");
>>
>> f.open("world"); // oops! Just opened file world and threw it away
>> f = File.open("world");// better!
>
> With your proposal you can still do "f.open("world");" and get the same
> result if the author provided alias.
The point is, don't provide the alias. Why would anyone do that in this
case?
> You are trying to solve another problem, that the author should better
> state if this is intended. The problem i see is user assumming author is
> a smart guy. But at the end he finds out the author is as dumb as
> himself {he should have RTFM :)}
There is no protection D could ever provide against dumb authors ;) He
could have named it "close", or "r72" and the compiler is powerless to
prevent this! It's useless to try and prevent such things, D compiler is
not a psychologist.
The problem I see here is that *smart* authors are inhibited from writing
smart code.
>> I challenge you to name File.open some way where it *wouldn't* be
>> confusing when called on an instance :)
>>
>> -Steve
>
> Easy! Don't call on an instance! openFile() out of the struct.
> I always add "make_" before any static function, otherwise static
> methods should be precise as
> http://forum.dlang.org/post/araqkvvgyspzmdecxqxi@forum.dlang.org
I like having open inside the struct, just a matter of preference. I
think File.open implies better than it returns a File more than openFile.
-Steve
More information about the Digitalmars-d
mailing list