Guido の multimethod (動的ディスパッチ コード) を変更しようとしています。
http://www.artima.com/weblogs/viewpost.jsp?thread=101605
継承と、場合によっては順不同の引数を処理します。
例 (継承の問題)
class A(object):
pass
class B(A):
pass
@multimethod(A,A)
def foo(arg1,arg2):
print 'works'
foo(A(),A()) #works
foo(A(),B()) #fails
各アイテムの super() が見つかるまで繰り返しチェックするよりも良い方法はありますか?
例 (引数の順序付けの問題) 衝突検出の観点からこれを考えていました。
例えば
foo(Car(),Truck()) and
foo(Truck(), Car()) and
両方をトリガーする必要があります
foo(Car,Truck) # Note: @multimethod(Truck,Car) will throw an exception if @multimethod(Car,Truck) was registered first?
私は特に「エレガントな」ソリューションを探しています。あらゆる可能性を力ずくで切り抜けることができることはわかっていますが、それを避けようとしています。座って解決策を打ち出す前に、いくつかの入力/アイデアを得たかっただけです。
ありがとう