ruby - 在模块上下文中向基类添加方法

标签 ruby metaprogramming

我想在 Ruby 中的 String 类中添加一个自定义方法。我知道可以使用以下代码完成:

class String
  def my_own_method
    # impelementation comes here 
  end
end

如果我将该代码写在文件“string.rb”和其他地方,即在 irb 中,我写 require“string” 然后它工作得很好并且我可以访问该自定义方法在任何字符串对象上。 但是,当我想将我的自定义代码打包成这样的模块时,问题就出现了:

module A
  class String
    def my_own_method
      # implementation
    end
  end
end

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

最佳答案

一种选择是使用 :: 来确保您获取顶级 String 类:

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

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

我也必须同意 Sergio 在他的回答结尾处的观点。不太确定是否需要这样做。

关于ruby - 在模块上下文中向基类添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860080/

相关文章:

ruby-on-rails - CSV 文件中有随机的新行/拆分。为什么会这样?

groovy - Groovy 中是否可以获取变量的名称?

c++ - 如何包装 "expanded variadic template parameters"?

c++ - type_traits 中是否有类似 std::remove_const_reference 的东西

ruby - Padrino 项目生成器失败 - 未定义方法 `add_builtin_type'

sql - Rails + PostgreSQL SSL 解密失败

ruby-on-rails - '$:.unshift File.dirname(__FILE__)' 在做什么?

ruby - 字符串中的高位和低位数字(Ruby)

javascript - 如何从子类的实例访问 typescript 中的静态属性?

c# - 学步车可以停下来吗?