Re:Five-minute Multimethods in Python
by icebraining on Wednesday December 07, 2011 @09:36AM
(#3323907)
Because a switch can usually be replaced by a dictionary?
is equivalent to
[ Parent
| on HN ]
Re:Five-minute Multimethods in Python
by adobriyan on Wednesday December 07, 2011 @09:46AM
(#3323945)
This forces programmer to invent dummy names.
And Python doesn't support nontrivial lambdas.
I've seen the argument about why that's more "pythonic", but it's not compelling. Allowing some syntactic sugar would make the meaning a lot more obvious.
Re:Five-minute Multimethods in Python
by DanielRibeiro on Wednesday December 07, 2011 @09:46AM
(#3323944)
Also, on Smalltalk (which influenced python) there is no switch statement as well. On the other hand, Smalltalk has no if, while, for statements as well (they are all methods).
While Smalltalk doesn't have case statements, a) it's trivial to add them, and b) the way you get around it is totally different: rather than use a Dictionary, you instead generally make a pile of tiny classes, each with a fooBar: method, and then simply make sure you've got the right object type and call fooBar: on it indiscriminately--in other words, basically your classic visitor pattern.
That's totally possible in Python, too, but I don't really ever see it done.
Re:Five-minute Multimethods in Python
by datashaman on Wednesday December 07, 2011 @11:16AM
(#3324388)
I like to use defaultdict for this. A strategy dictionary, with a default strategy.
dispatch = defaultdict(default_stategy)
dispatch['one'] = new_strategy
print dispatch['two'] => default_strategy.
Beats case statements and elif chains.
I usually just provide a default argument to get:
dispatch.get('two', default_strategy)