3

在模块上定义的实例方法:

module A
  def foo; :bar end
end

当包含该模块时,似乎可以作为该模块的模块方法调用:

include A
A.foo # => :bar

这是为什么?

4

2 回答 2

6

您将 A 包含在对象中。

module A
  def self.included(base)
    puts base.inspect #Object
  end

  def foo
    :bar
  end
end

include A

puts A.foo # :bar
puts 2.foo # :bar

#puts BasicObject.new.foo   #this will fail

另请注意,顶级对象main是特殊的;它既是 Object 的实例,又是 Object 的一种委托者。

http://banisterfiend.wordpress.com/2010/11/23/what-is-the-ruby-top-level/

于 2013-08-02T05:06:01.090 回答
0

在 irb 中尝试过,它包含在Object. include A也返回Object

irb > module A
irb >   def foo; :bar end
irb > end
 => nil 
irb > Object.methods.include? :foo
 => false
irb > include A
 => Object
irb > Object.methods.include? :foo
 => true
于 2013-08-02T05:06:29.647 回答