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