我正在尝试修改 Guido 的多方法(动态调度代码):
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?
我正在寻找一个“优雅”的解决方案。我知道我可以通过所有的可能性暴力破解我的方式,但我试图避免这种情况。在坐下来敲定解决方案之前,我只是想获得一些输入/想法。
谢谢