🌿 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