这是一个更普遍的问题,然后是特定于语言的问题,尽管我在玩 python ncurses 模块时遇到了这个问题。我需要显示语言环境字符并将它们识别为字符,所以我只是快速地从 curses 模块中修补了一些函数/方法。
这就是我所说的快速而丑陋的解决方案,即使它有效。而且变化相对较小,所以我希望我没有搞砸任何事情。我的计划是找到另一个解决方案,但是看到它运行良好并且运行良好,你知道它是怎么回事,我继续处理我必须处理的其他问题,我确定如果没有错误,我永远不会让它变得更好。
不过,在我看来,更普遍的问题是——显然有些语言允许我们在类中对大块代码进行猴子补丁。如果这是我自己用的代码,或者改动很小,没关系。如果其他开发人员使用我的代码怎么办,他看到我使用了一些众所周知的模块,所以他可以假设它像以前一样工作。然后,这种方法突然表现得与它应该的不同。
所以,非常主观,我们应该使用猴子补丁,如果是,何时以及如何?我们应该如何记录它?
编辑:对于@guerda:
Monkey-patching 是在执行时动态改变某些代码的行为,而不改变代码本身的能力。
Python中的一个小例子:
import os
def ld(name):
print("The directory won't be listed here, it's a feature!")
os.listdir = ld
# now what happens if we call os.listdir("/home/")?
os.listdir("/home/")