我可以从模块内部添加类定义吗?

时间:2010-11-02 16:12:55

标签: ruby class ruby-on-rails-3 module

我想在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

那我怎么能这样做呢?

1 个答案:

答案 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