给出以下示例:
module A
module B
def whoa
puts 'Whoa!'
end
end
end
如何访问 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
这些方法似乎都不起作用。
答案 0 :(得分:7)
假设您不需要类级方法,您还可以将模块包含到类中,实例化该类的对象并调用whoa
:
class C
include A::B
end
c = C.new
c.whoa
# Whoa!
答案 1 :(得分:5)
您已将方法定义为实例方法。如果要在没有实例的情况下使用该方法,则它应该是模块上的类方法:
module A
module B
def self.whoa
puts 'Whoa!'
end
end
end
1.9.3p327 :009 > A::B.whoa
Whoa!
=> nil