我想在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类并自动将它们的方法添加到基类中?任何帮助都非常感谢。
答案 0 :(得分:7)
一种选择是使用::
来确保您抓住顶级String类:
module A
class ::String
def my_own_method
self.reverse
end
end
end
"some string".my_own_method # => "gnirts emos"
我还必须同意塞尔吉奥在答案结束时的观点。不太确定是否需要这样做。
答案 1 :(得分:2)
嗯,首先,您可以使用class_eval
module A
String.class_eval do
def my_own_method
self.upcase
end
end
end
'foo'.my_own_method # => "FOO"
但如果我是你,我会选择在全球范围内开设一个String
课程(你的第一个片段)。我真的没有看到不这样做的原因。