gpt4 book ai didi

oop - 猴子补丁还是不猴子?

转载 作者:行者123 更新时间:2023-12-04 03:25:06 26 4
gpt4 key购买 nike

这是一个更普遍的问题,然后是特定于语言的问题,尽管我在玩 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/")

最佳答案

不!

尤其是使用免费软件,您有所有可能将您的更改纳入主发行版。但是,如果您在本地副本中有一个薄弱的黑客记录,您将永远无法发布该产品,并且升级到下一个版本的 curses(任何人的安全更新)将是非常高的成本。

this answer了解外国代码库的可能性。 linked screencast真的很值得一看。突然间,一个肮脏的黑客变成了有值(value)的贡献。

如果您出于某种原因确实无法将补丁安装到上游,至少创建一个本地 (git) 存储库来跟踪上游并将您的更改放在单独的分支中。

最近我遇到了一个问题,我不得不接受猴子修补作为最后的手段:Puppet是一段“到处运行”的 ruby​​ 代码。由于代理必须在 - 可能经过认证的 - 系统上运行,因此它不需要特定的 ruby​​ 版本。其中一些具有可以通过在运行时中修补选择方法来解决的错误。这些补丁是特定于版本的,包含的,并且目标被卡住。我在那里看不到其他选择。

关于oop - 猴子补丁还是不猴子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com