我想在Rails应用程序中添加一个类的方法。我试图把它分成一个模块,就像这样:
module Hah
class String
def hurp
"hurp durp"
end
end
end
#make sure the file containing the module is loaded correctly.
puts "Yup, we loaded"
#separate file
include Hah
"foobar".hurp
#should be "hurp durp"
我知道包含模块的文件正在正确加载,因为当我包含文件时puts
正确打印,但是我收到错误:
undefined method `hurp' for "foobar":String
那我怎么能这样做呢?
答案 0 :(得分:3)
module Hah
class String
#...
end
end
大致相当于:
class Hah::String
#...
end
创建类Hah::String
,而不引用全局命名空间中的类String
。请注意,后者仅在已声明module Hah
时使用module
关键字Module.new
等),而前者声明或重新打开module Hah
然后在该范围声明或重新打开class String
,在上下文中隐含class Hah::String
。
要在全局命名空间中打开类String
,请使用:
module Hah
class ::String
#...
end
end
因为::String
严格在顶级/全局命名空间中引用了类String
。