🌿 Ancestors chain §
- Khi khởi tạo một Class, mỗi Class sẽ có một
ancestors chain - là danh sách các classes và modules mà nó được kế thừa hoặc imported.
Trong Ruby có 3 cách để import Module cho 1 Class.
🌱 Include §
- Method trong module sẽ trở thà nh
instance method cá»§a Class.
- Thứ tự trong
ancestors chain: Class > Module/Class imported > Superclass.
module A
def say
p 'hello'
end
end
class B
include A
end
> B.new.say
=> "hello"
>
> B.ancestors
=> [B, A, ..., Object, ..., BasicObject]
🌱 Prepend §
- Giống
include, khác thứ tự được thêm và o trong list ancestors.
- Thứ tự trong
ancestors chain: Module/Class imported > Class > Superclass.
module A
def say
p 'hello'
end
end
class B
prepend A
end
> B.new.say
=> "hello"
>
> B.ancestors
=> [A, B, ..., Object, ..., BasicObject]
🌱 Extend §
- Method trong module trở thà nh
class method cá»§a Class.
- Import methods của module và o
ancestors chain cá»§a singleton class cá»§a class extend.
module C
def say
p 'hello'
end
end
class D
extend C
end
> D.new.say
=> undefined method 'say' ...
>
> D.say
=> "hello"
>
> D.ancestors
=> [D, ..., Object, ..., BasicObject]
>
> D.singleton_class.ancestors
=> [#<Class:D>, C, ...]
🌿 Tham khảo §