On 5/9/07, BJörn Lindqvist <[EMAIL PROTECTED]> wrote:
> I very much prefer the latter version. The reason is because the
> "locality of reference" is much worse in the overloaded version and
> because I have found it to be very hard to read and understand
> overloaded code in practice.
>
> Let's say you find some code that looks like this:
>
> def do_stuff(ob):
> yield obj
>
> @overload
> def do_stuff(ob : ClassA):
> for o in ob:
> for ob in do_stuff(o):
> yield ob
>
> @overload
> def do_stuff(ob : classb):
> yield ob
>
> Or this:
>
> def do_stuff(ob):
> if isinstance(ob, classb) or not isinstance(ob, ClassA):
> yield ob
> else:
> for o in ob:
> for ob in do_stuff(o):
> yield ob
>
> With the overloaded code, you have to read EVERY definition of
> "do_stuff" to understand what the code does. Not just every definition
> in the same module, but every definition in the whole program because
> someone might have extended the do_stuff generic function.
I don't buy this argument. That's like saying that I can't understand
what len() does without examining every object that defines __len__().
Do you really have trouble understanding functions like len() or
hash()?
STeVe
--
I'm not *in*-sane. Indeed, I am so far *out* of sane that you appear a
tiny blip on the distant coast of sanity.
--- Bucky Katt, Get Fuzzy
_______________________________________________
Python-3000 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com