当前位置:  开发笔记 > 编程语言 > 正文

猴子补丁还是不补?

如何解决《猴子补丁还是不补?》经验,为你挑选了1个好方法。

这是更普遍的问题,然后是语言特定的,虽然我在使用python ncurses模块时碰到了这个问题.我需要显示区域设置字符并将它们识别为字符,所以我很快就从curses模块中修补了一些函数/方法.

这就是我称之为快速而丑陋的解决方案,即使它有效.而且变化相对较小,所以我希望我没有搞砸任何东西.我的计划是找到另一个解决方案,但看到它的工作和运作良好,你知道它是怎么回事,我继续处理我必须处理的其他问题,我敢肯定,如果没有这个问题,我将永远不会让它更好.

然而,更普遍的问题出现在我面前 - 显然有些语言允许我们在类中修补大块代码.如果这是我自己只使用的代码,或者变化很小,那就没关系.如果其他开发人员接受我的代码会怎样,他看到我使用了一些众所周知的模块,所以他可以认为它可以像以前一样工作.然后,这种方法突然表现得与之不同.

所以,非常主观,我们应该使用猴子补丁,如果是,何时以及如何?我们该怎么记录它?


编辑:for @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/")

David Schmit.. 8

别!

特别是使用免费软件,您可以获得所有可能性,以便将更改纳入主要分发.但是,如果你的本地副本中有一个文档记录很少,那么你将永远无法发布产品并升级到下一版本的curses(安全更新任何人)将是非常高的成本.

请参阅此答案,了解外国代码库中的可能性.该链接的截屏确实是值得的手表.突然间,一个肮脏的黑客变成了一个有价值的贡献.

如果由于某种原因你真的无法上传补丁,至少要创建一个本地(git)仓库来跟踪上游并在单独的分支中进行更改.

最近我遇到了一个问题,我必须接受猴子修补作为最后的手段:Puppet是一个"无处不在"的红宝石代码.由于代理必须运行 - 可能已经认证 - 系统,因此不需要特定的ruby版本.其中一些有bug可以通过运行时中的猴子修补select方法来解决.这些修补程序是特定于版本的,包含的,并且目标被冻结.我认为没有其他选择.



1> David Schmit..:
别!

特别是使用免费软件,您可以获得所有可能性,以便将更改纳入主要分发.但是,如果你的本地副本中有一个文档记录很少,那么你将永远无法发布产品并升级到下一版本的curses(安全更新任何人)将是非常高的成本.

请参阅此答案,了解外国代码库中的可能性.该链接的截屏确实是值得的手表.突然间,一个肮脏的黑客变成了一个有价值的贡献.

如果由于某种原因你真的无法上传补丁,至少要创建一个本地(git)仓库来跟踪上游并在单独的分支中进行更改.

最近我遇到了一个问题,我必须接受猴子修补作为最后的手段:Puppet是一个"无处不在"的红宝石代码.由于代理必须运行 - 可能已经认证 - 系统,因此不需要特定的ruby版本.其中一些有bug可以通过运行时中的猴子修补select方法来解决.这些修补程序是特定于版本的,包含的,并且目标被冻结.我认为没有其他选择.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有