我想在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"
我也必须同意塞尔吉奥在回答的最后的观点。不确定是否需要这样做。