代码之家  ›  专栏  ›  技术社区  ›  Nikita Rybak

防止gema重写无关gemb的方法

  •  2
  • Nikita Rybak  · 技术社区  · 15 年前

    一段时间以来, xml-simple gem一直对我很好(间接地,通过另一个gem)。

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

    class XmlSimple # :nodoc:
      def self.xml_in(*args)
        FasterXmlSimple.xml_in *args
      end
    end
    

    但这两颗宝石在行为和选择上有很大的不同。现在,每次我打电话 XmlSimple.xml_in ,我去亚马逊的版本。

    有没有办法阻止gema(amazons3)重写gemb(xmlsimple)的方法?或者让亚马逊的改变只出现在亚马逊的宝石上?例如,当部署在Heroku上时,一切正常。

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    5 年前

    Ruby有开放类,这意味着任何人都可以随时修改任何类。这是无法阻止的。而你所描述的问题正是每一本手册、每一个教程、每一门课程、每一个常见问题解答都要教授的原因 去做那件事。

    选择器名称空间 到Ruby 2.0,提供词汇范围的monkey补丁。最近,马茨将目光投向了 classboxes . Ruby2.0很可能会提供类框来限制monkey修补的范围,但在此之前,最好是向库的作者提交一个bug。