有一段时间,xml-simple宝石一直在为我工作(间接通过另一颗宝石)。
但最近我还要安装Amazon S3 gem。亚马逊家伙已经决定xml-simple不够酷,所以他们提供了一个替代品:'faster-xml-simple'。他们还决定现在每个人都想使用他们的代码,所以他们这样做了:
class XmlSimple # :nodoc:
def self.xml_in(*args)
FasterXmlSimple.xml_in *args
end
end
但是两个宝石的行为和选择差别很大。现在,每次拨打XmlSimple.xml_in
时,我都会转到亚马逊的版本。
有没有办法阻止宝石A(亚马逊S3)重写宝石B的方法(xml-simple)?或者只是亚马逊的宝石才能看到亚马逊的变化?例如,当部署在Heroku上时,一切正常。
谢谢!
答案 0 :(得分:3)
Ruby有开放类,这意味着任何人都可以随时修改任何类。没有办法阻止这一点。而你所描述的问题正是每个手册,每个教程,每个课程,每个常见问题解答教导不的原因。
在过去10年左右的时间里,人们一直在讨论将选择器命名空间添加到Ruby 2.0中,以提供词法范围的猴子补丁。最近,matz将目光投向了classboxes。看起来Ruby 2.0很可能会提供类框来限制猴子修补的范围,但在那之前,你最好的办法是向该库的作者提交一个bug。