モジュールで定義されたインスタンス メソッド:
module A
def foo; :bar end
end
そのモジュールが含まれている場合、そのモジュールのモジュールメソッドとして呼び出すことができるようです:
include A
A.foo # => :bar
何故ですか?
モジュールで定義されたインスタンス メソッド:
module A
def foo; :bar end
end
そのモジュールが含まれている場合、そのモジュールのモジュールメソッドとして呼び出すことができるようです:
include A
A.foo # => :bar
何故ですか?
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/を参照してください
これを 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