首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止gem A重写无关gem B的方法

防止gem A重写无关gem B的方法
EN

Stack Overflow用户
提问于 2010-09-16 07:08:14
回答 1查看 179关注 0票数 2

有一段时间,xml-simple gem对我来说工作得很好(间接地,通过另一个gem)。

但最近我不得不安装亚马逊S3 gem。亚马逊的人认为xml-simple不够酷,所以他们提供了一个替代品:“faster-xml-simple”。他们还决定现在每个人都想使用他们的代码,所以他们这样做:

代码语言:javascript
复制
class XmlSimple # :nodoc:
  def self.xml_in(*args)
    FasterXmlSimple.xml_in *args
  end
end

但是两个宝石在行为和选择上有很大的不同。现在,每次我调用XmlSimple.xml_in时,我都会转到亚马逊的版本。

有没有办法阻止gem A(亚马逊S3)重写gem B的方法(xml-simple)?或者让亚马逊的改变只出现在亚马逊的宝石上?例如,当部署在Heroku上时,它工作得很好。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-16 07:51:19

Ruby有开放的类,这意味着任何人都可以在任何时候修改任何类。没有办法阻止这一点。像你描述的这样的问题正是为什么每本手册,每一篇教程,每门课程,每一个常见问题解答都教你不要这么做的原因。

在过去的10年左右,人们一直在谈论将选择器名称空间添加到Ruby 2.0中,以提供词法范围内的猴子补丁。最近,马茨将目光投向了。看起来Ruby 2.0很可能会提供类盒来限制猴子补丁的范围,但在此之前,您最好的办法是向该库的作者提交一个bug。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3722521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档