我想在ruby的string类中添加一个自定义方法。我知道可以通过以下代码完成:

class String
  def my_own_method
    # impelementation comes here
  end
end

如果我把代码写在一个称为“string.rb”的文件中,或者在其他地方,比如在irb中,我会写require "string",那么它工作得很好,我可以访问任何string对象上的自定义方法。
但是,当我想将自定义代码打包成这样的模块时,就会出现问题:
module A
  class String
    def my_own_method
      # implementation
    end
  end
end

然后,当我包含模块(没有错误)时,除非通过调用(比如说,s = A::String.new)直接实例化字符串,否则我无法访问每个字符串对象上的方法。在这种情况下,我可以访问我的自定义方法,但只能访问不在任何字符串对象上的s变量。我应该如何打包我的util类并自动将它们的方法添加到基类?任何帮助都是非常感谢的。

最佳答案

一个选项是使用::确保获取顶级字符串类:

module A
  class ::String
    def my_own_method
      self.reverse
    end
  end
end

"some string".my_own_method # => "gnirts emos"

我也必须同意塞尔吉奥在回答的最后的观点。不确定是否需要这样做。

10-05 20:31
查看更多