问题标签 [monkeypatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
773 浏览

ruby - Ruby 运算符可以别名吗?

我对如何让它发挥作用很感兴趣:

我希望当某些东西被附加到me变量时,该对象将使用重新定义的方法。

如果我尝试运行它,我会得到syntax error, unexpected ':', expecting kEND.:<<

0 投票
1 回答
416 浏览

python - 是否可以在 Django 项目中重新定义反向?

我有一些自定义逻辑,每次反转 URL 时都需要执行,即使对于第三方应用程序也是如此。我的项目是一个多租户的 web 应用,租户是根据 URL 来识别的。没有一个有效的 URL 不包含租户标识符。

我已经有一个包装函数reverse,但现在我需要一种方法来告诉每个已安装的应用程序使用它。包装器reverse使用本地线程将标识符注入到生成的 URL 中。我可以把这个函数写成装饰器reverse,但我不知道在哪里做实际的装饰。

适度严格的约束:我已经在使用 3 个 3rd-party 应用程序,我可能会添加更多。解决方案不应该要求我修改所有这些第三方应用程序的源代码。如果有更简单的方法,我不喜欢在多个 3rd 方源代码树之上维护补丁的想法。我可以使reverse已修饰的文档非常清晰。

原始问题:我在哪里可以进行这样的更改以保证它适用于每次调用reverse

可能的替代问题:确保每个 URL(包括由 3rd 方应用程序生成的 URL)获取租户标识符的更好方法是什么?顺便说一句,除了在 URL 中嵌入租户 ID 之外,我愿意采用更好的方法来处理任何这些问题;这个决定现在已经很确定了。谢谢。

谢谢。

0 投票
2 回答
177 浏览

ruby - 运行/启动 ruby​​ 时自动需要一个类

我在一些 Ruby 类中做一些猴子补丁,我希望在我运行 ruby​​ 时自动包含在内。

例如:

我将方法 trim 添加到 String。我希望能够做到这一点:

ruby -e 'puts "aaaa".trim'

我不想这样做:

ruby -e '需要“monkey.rb”; 放“ aaaa” .trim'

每当我开始使用 ruby​​ 时,是否有包含我的猴子补丁?伊布呢?

谢谢!

0 投票
1 回答
170 浏览

jquery - “monkeypatching”背后的正式设计模式是什么?

这里的核心 CS 问题:在 Gamma 等中列出的设计模式中,哪些(如果有)涵盖了猴子补丁?此外,对于哪类问题,monkeypatching 与子类化比较合适?修补核心库类中的错误是其中之一,还有其他的吗?我听到很多关于stackoverflow上的monkeypatching的喧嚣,你们中的大多数人似乎对此有强烈的疑虑,但作为一名程序员,我真的很喜欢封装通用功能位并将它们包含在rails中的对象模型中的能力。

以thoughtbot-paperclip 为例,为什么我想要将它与今天存在的monkeypatch 方法进行子类化?

谢谢,-埃里克

0 投票
2 回答
2762 浏览

string - “扩展”“字符串”表 - 怎么做?这甚至是个好主意吗?

我正在开发一个 Lua 库,我需要在其中将给定字符串的第一个字母大写。因此,我创建了以下函数:

这最初是一个“内部”函数,仅在我的库中使用。

现在我意识到我的用户在某些情况下会想要使用这个功能。

问题 1 我正在考虑扩展字符串表,但不确定如何进行。这样做就足够了,还是有更“面向lua”的方式?

问题 2 我想知道猴子补丁字符串是否是个好主意。我应该提供一个公共的“大写”功能吗?

编辑 - 万一将来有人发现这个,字符串食谱页面上会显示一个更简单的“大写”功能:

0 投票
2 回答
122 浏览

ruby - What work-arounds can be applied to thread-unsafe autoload in ruby?

As mentioned in this question, autoloading within a thread can cause problems. What work-arounds can be applied?

0 投票
1 回答
1026 浏览

ruby-on-rails - Rails 中的自定义表单元素

所以我是 Rails 的新手,我试图弄清楚添加自定义表单元素的规范方法是什么。目前我这样做的方式非常糟糕。

然而,我已经看到了这一点。

(从这里

扩展 FormBuilder 似乎是一个比鸭子打孔更好的解决方案。有没有其他方法可以做到这一点,不需要直接将 FormBuilder 类的一部分复制到我的自定义类中?

0 投票
4 回答
742 浏览

oop - (猴子)补丁还是不(猴子)补丁,这是个问题

我正在与一位同事谈论我们使用的某些软件包的一种相当意外/不受欢迎的行为。尽管我们有一个简单的修复(或至少是解决方法),没有任何明显的副作用,但他强烈建议通过硬修补并将补丁发布到上游来扩展相关代码,希望在将来的某个时候被接受。事实上,我们会针对多个软件包的特定版本维护补丁,这些补丁会自动应用于每个新版本。主要论点是这是正确的做法,而不是“丑陋”的解决方法或脆弱的猴子补丁。另一方面,我更喜欢实用性而不是纯度,我的一般经验法则是“无补丁”>“猴子补丁”>“硬补丁”,至少对于(关键)错误修复以外的任何东西。

所以我想知道是否就何时更好地(硬)补丁、猴子补丁或只是尝试解决不能完全按照人们想要的方式解决第三方包达成共识。它是否主要与补丁的原因(例如修复错误、修改行为、添加缺少的功能)、给定的包(大小、复杂性、成熟度、开发人员响应能力)、其他原因或没有一般规则和一个应该根据具体情况决定吗?

0 投票
3 回答
1234 浏览

python - 使用 cPickle 在 2.4 中酸洗 array.array

我正在开发一个基于 python 2.4 的项目(它是一个嵌入式 python 项目,所以我没有选择使用的 python 版本)。在整个应用程序中,我们使用array.array来存储数据。

在 2.5中添加了对酸洗array.array对象的支持pickle(和)。cPickle当使用纯 python pickle 类(我们将 Pickler/Unpickler 子类化来处理数组)时,我们在 2.4 中有一个可行的解决方法,但这不适用于 cPickle(由于性能问题,我们需要这个)。

有什么建议么?

编辑——解决方案:

这是似乎工作的最终代码(感谢您的建议):

0 投票
5 回答
50382 浏览

python - 一只猴子如何在 python 中修补一个函数?

我无法用另一个函数替换来自不同模块的函数,这让我发疯。

假设我有一个看起来像这样的模块 bar.py:

我有另一个看起来像这样的模块:

我希望得到结果:

但相反,我得到了这个:

我究竟做错了什么?