Fully dynamic d by opDotExp overloading

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Apr 18 08:07:24 PDT 2009


Daniel Keep wrote:
> 
> bearophile wrote:
>> Andrei Alexandrescu:
>>> Pascalize!S s;
>>> s.foo(); // works
>>> s.Foo(); // works too
>>> s.fOo(); // yup, works again
>> I can show something even more extreme :-)
>>
>> What we are discussing in this thread is named the __getattr__ method in Python:
>> http://docs.python.org/reference/datamodel.html#object.__getattr__
>>
>> Note that in Python there's something even more powerful, __getattribute__:
>> http://docs.python.org/reference/datamodel.html#object.__getattribute__
>>
>> So I have created this, that I actually use in a large Graph class of mine that has many methods:
>> http://code.activestate.com/recipes/409000/
>> Such class can be used from the interactive shell too, to play with graphs in an interactive way, modify them, plot them, etc.
>> Often you may not remember the name of a method you need, or you may mistype it. In such situation __getattr__ is being called. It collects the class method names, removed the useless ones, and performs a similarity search between the given wrong method name and the strings in that list. Then returns the 4-5 most similar ones, each one followed by their docstring, that shows the function signature and the purpose of the method. So you can usually find the method you were looking for, and use it. This is useful both when using such Graph class from the command line and when you are writing code without an IDE that helps you finding method names.
>> That Python code of mine becomes doable in D too (using for example my very fast approximate string distance. This is a case where you don't need the list of changes, but just the distance number. So superdan can rest in peace).
>>
>> Bye,
>> bearophile
> 
> There's an interesting idea...
> 
> Instead of "No member 'foo'", you could have "No member 'foo'; did you
> mean 'far' or 'fur'?"
> 
>   -- Daniel

Heh. The string kernels in std.numeric 
(http://erdani.dreamhosters.com/d/web/phobos/std_numeric.html) are to 
help with exactly that.

Andrei



More information about the Digitalmars-d mailing list