从该模块中的类访问模块方法?

时间:2013-12-05 17:06:31

标签: ruby module

在Ruby 2.0下,从该模块中的类访问模块方法的正确方法是什么?

例如,如果我有

module Foo
    class Foo
        def do_something
            Foo::module_method
        end
    end

    def self.module_method
        puts 'How do I call this?'
    end
end 

我明白了,

  

./ so-module.rb:7:in do_something': undefined method module_method'   for Foo :: Foo:Class(NoMethodError)来自./so-module.rb:16:in`'

定义模块方法的正确方法是什么,以便我可以从类Foo访问它?

2 个答案:

答案 0 :(得分:1)

您必须在模块的单例类上定义方法:

module Foo
  class Bar
    def do_something
      Foo.module_method
    end
  end

  def self.module_method
    'Success!'
  end
end

Foo::Bar.new.do_something  #=> "Success!"

答案 1 :(得分:0)

请查看以下代码:

module Foo
    class Bar
        include Foo
        def do_something
            module_method
        end
    end
    def module_method
        puts 'How do I call this?'
    end
end

b = Foo::Bar.new
b.do_something

结果:

How do I call this?

您甚至可以尝试添加以下代码:

b1 = Foo::Bar::Bar.new
b1.do_something

这很棘手且结果相同:

How do I call this?