问题标签 [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 投票
1 回答
1981 浏览

ruby-on-rails - 如何修补现有的 gem(Rails 引擎)?

我开始使用 Ruby 和 Rails 3。我想使用一个 Rails 引擎(打包为 Gem),但它并不能完全按照我的意愿工作。我想进行一些细微的修改,但不想创建自己的分叉版本。我认为这是猴子修补变得有用的地方。

作为 Ruby 新手(并且来自 PHP 背景)猴子补丁对我来说是一个新概念。我将如何着手修补现有的 gem,我将如何组织我的修改?我正在寻找一些“最佳实践”方法。

0 投票
8 回答
261701 浏览

python - 什么是猴子补丁?

我想了解,什么是猴子补丁或猴子补丁?

这是否类似于方法/运算符重载或委托?

这些东西有什么共同点吗?

0 投票
2 回答
3493 浏览

ruby - 在模块中打开类

我知道我可以执行以下将方法添加到 String 类

这将返回4

我希望能够拥有一个带有接收字符串的函数的模块,但能够do_something在该字符串上调用该方法(例如见下文) - 有可能吗?

编辑:添加了不起作用的示例代码

这给出了错误:undefined method 'do_something' for "hello":String (NoMethodError)

0 投票
1 回答
486 浏览

ruby - 什么猴子补丁创建了私有方法拆分?

Ruby: Private method called for 3:Fixnumprivate method `split' called for nil:NilClass (NoMethodError) 问题分别提到splitFixnumNilClass对象的私有方法。

这个私有split方法是一个猴子补丁的伪关键字(比如printand puts)吗?如果是这样,添加了什么,为什么他们使用已经存在的方法名称String

0 投票
6 回答
21514 浏览

javascript - “猴子补丁”真的那么糟糕吗?

像 Ruby 和 JavaScript 这样的一些语言有开放的类,允许你修改核心类的接口,比如数字、字符串、数组等。显然这样做可能会使其他熟悉 API 的人感到困惑,但是否有充分的理由避免它,假设您要添加到界面而不更改现有行为?

例如,将Array.map实现添加到不实现 ECMAScript 第 5 版的 Web 浏览器(如果您不需要所有 jQuery)可能会很好。或者您的 Ruby 数组可能会受益于使用“inject”的“sum”便捷方法。只要更改与您的系统隔离(例如,不是您为分发而发布的软件包的一部分),是否有充分的理由不利用此语言功能?

0 投票
0 回答
172 浏览

java - JRuby - Monkeypatching 作为穷人的安全经理?

选择性地猴子修补所有 Ruby 核心类(文件、内核、IO 等)以创建一种访问控制有什么问题吗?

我的 JVM 将运行不受信任的用户代码,出于某些原因,我不想使用 Java 的安全管理器。因此,我求助于 Ruby 开放类来实现我自己的沙箱。我已经对几乎所有的核心类进行了猴子补丁,但由于某种原因,我觉得这还不够安全。我是偏执狂,还是这真的是一个糟糕的解决方案?

在一个相关的问题中,有没有办法从我的 Ruby 运行时中选择性地排除 Java。我的库需要 Java,但我不希望用户能够访问它。我已经在我的库中包含了 Java,而这些库又被“必需”到了用户脚本中。

任何帮助,将不胜感激。谢谢!:)

0 投票
1 回答
5833 浏览

ruby - 如何正确修补 Ruby?

我正在尝试对标准库中 Net 类中的一行进行monkeypatch。我在项目的 lib 文件夹中创建了一个名为 patch.rb 的文件并添加了这个

但它不起作用。我这样做对吗?(这与继承层次结构完全平行。)

编辑:部分问题是我必须将文件放在 initalizers 文件夹中。但仍然看到同样的错误。

0 投票
1 回答
555 浏览

ruby-on-rails - Rails 2.3+Rake:用于 rake 任务的类的猴子补丁方法

您如何对 rake 任务中使用的类的方法进行修补?特别是我想重新定义Synthesis::AssetPackage#compress_jsasset:packager插件的方法。我试图将重新定义放在Rakefilein 中RAILS_ROOT,但这没有用。我宁愿不直接更改插件。

0 投票
5 回答
7226 浏览

javascript - 是否可以像 C# 或像 Ruby 那样给 javascript 部分类行为或猴子补丁?

部分类背后的想法是您可以将某些函数组合在一起。C# 中最好的例子是将控件定义放在一个文件中,而将事件处理程序放在另一个文件中。在 Ruby 中,您可以使用 Monkey 修补来替换整个函数等,以获取代码来执行您想要的操作。

我还没有找到这样做的理由,但我认为随着网络的改进,更多的应用程序将在客户端,所以我想知道我在服务器端语言中发现的一些很棒的功能,我也可以在 Javascript 中使用。

有人知道吗?

0 投票
4 回答
1288 浏览

python - 猴子补丁 __del__ 到新功能

出于特定调试目的,我想包装任意对象的del函数以执行额外的任务,例如将对象的最后一个值写入文件。

理想情况下我想写猴子(x),它应该意味着当x被删除时,x的最终值被打印出来

现在我认为del是一个类方法。所以下面是一个开始:

但是,如果我只想猴子特定的对象,我想我需要动态地将它们的类重写为一个新的类?!此外,无论如何我都需要这样做,因为我无法访问内置类型的del ?

任何人都知道如何实施?