about 10 years ago
include 和 extend 的用法
- include 讓module的method作用在實例變數上
- extend 讓module的method作用在類別變數上
看以下兩個例子
include
module Foo
def foo
puts 'heyyyyoooo!'
end
end
class Bar
include Foo
end
include module Foo 後,foo只能使用在Bar的實例變數上
Bar.new.foo # heyyyyoooo!
Bar.foo # NoMethodError: undefined method ‘foo’ for Bar:Class
extend
module Foo
def foo
puts 'heyyyyoooo!'
end
end
class Bar
extend Foo
end
extend module Foo 後,foo只能使用在Bar的類別變數上
Bar.new.foo # NoMethodError: undefined method ‘foo’ for #<Baz:0x1e708>
Bar.foo # heyyyyoooo!