3

モジュールで定義されたインスタンス メソッド:

module A
  def foo; :bar end
end

そのモジュールが含まれている場合、そのモジュールのモジュールメソッドとして呼び出すことができるようです:

include A
A.foo # => :bar

何故ですか?

4

2 に答える 2

6

A を Object に含めています。

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 で試してみると、 に含まれていましたObjectinclude 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 に答える