如何访问Ruby中另一个模块内的模块中定义的方法?

DJ *_*uby 3 ruby methods module include nomethoderror

给出以下示例:

module A
  module B
    def whoa
      puts 'Whoa!'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如何访问whoa方法?

1.9.3p392 :047 > A.B.whoa
NoMethodError: undefined method `B' for A:Module

1.9.3p392 :048 > A::B.whoa
NoMethodError: undefined method `whoa' for A::B:Module

1.9.3p392 :049 > A::B::whoa
NoMethodError: undefined method `whoa' for A::B:Module
Run Code Online (Sandbox Code Playgroud)

这些方法似乎都不起作用.

Hun*_*len 7

假设您不需要类级方法,您还可以将模块包含到类中,实例化该类的对象并调用whoa:

class C
   include A::B
end

c = C.new
c.whoa
# Whoa!
Run Code Online (Sandbox Code Playgroud)


Win*_*eld 5

您已将方法定义为实例方法.如果要在没有实例的情况下使用该方法,则它应该是模块上的类方法:

module A
  module B
    def self.whoa
      puts 'Whoa!'
    end
  end
end

1.9.3p327 :009 > A::B.whoa
Whoa!
 => nil
Run Code Online (Sandbox Code Playgroud)