我是一名 Ruby 程序员。对我来说,monkeypatching 是在运行时更改外部项目中的类或模块方法。我感兴趣的是,您有什么机制可以保护您免受某些对该功能的滥用。接下来是我遇到的一些场景,monkeypatching 咬了我一口。
虽然我根本不了解 Smalltalk,但这种语言早在 Ruby 之前就已经存在了。我做了一些研究,看看 Smalltalk 是否以及如何解决其中的一些问题,但在 Google 上没有找到太多。所以我在这里,询问 Smalltalkers 是否可以分享他们的智慧。
场景 A:错误修复冲突
项目 A 和 B 依赖于项目 C。项目 C 有一个错误。项目 A 和 B 版本包含对项目 C 的修复。
如果你的代码使用项目 A 和 B,你怎么知道补丁不会冲突?
场景 B:过时的错误修复
项目 C 发布了他们项目的固定次要版本。
如果您加载项目 A,是否仍会应用补丁,但可能会损坏?我很想知道是否存在某种机制,例如,如果代码已修复,则不加载补丁。
场景 C:冲突的扩展
项目 A 和 B 使用项目 C 的类 Foo。两者都向 Foo 添加了一个实用方法,例如 #toDate。A 的 toDate 版本返回一个日期字符串,而 B 的一个返回 Date 对象。
如果您加载两个项目(使用 C dep),是否有一种机制可以警告/防止冲突?或者您是否必须等到运行时由于方法中的错误期望而引发错误?
关于问题更新
阅读答案,我意识到我的问题过于广泛和模糊。所以这里是它的重写版本。