📜  红宝石混合

📅  最后修改于: 2022-05-13 01:55:29.274000             🧑  作者: Mango

红宝石混合

在学习 Ruby Mixins 之前,我们应该先了解一下面向对象的概念。如果我们不这样做,请阅读 Ruby 中的面向对象概念。当一个类可以从多个父类继承特性时,该类应该具有多重继承。但是 Ruby 不直接支持多重继承,而是使用一种称为 mixin 的工具。 Ruby 中的 Mixins 允许模块使用include方法访问另一个模块的实例方法。
Mixins 提供了一种向类添加功能的受控方式。 mixin 中的代码开始与类中的代码进行交互。在 Ruby 中,封装在模块中的代码称为 mixins,类可以包含或扩展。一个类包含许多mixin。

下面是 Ruby Mixins 的示例。
示例 #1:

# Ruby program of mixins
  
# module consist 2 methods
module G
    def g1
   end
   def g2
   end
end
  
# module consist 2 methods
module GFG
   def gfg1
   end
   def gfg2
   end
end
  
# Creating a class
class GeeksforGeeks
include G
include GFG
   def s1
   end
end
  
# Creating object
gfg = GeeksforGeeks.new
  
# Calling methods
gfg.g1
gfg.g2
gfg.gfg1
gfg.gfg2
gfg.s1

这里,模块 G 由方法 g1 和 g2 组成。模块 GFG 由方法 gfg1 和 gfg2 组成。 GeeksforGeeks 类包括模块 G 和 GFG。 GeeksforGeeks 类可以访问所有四种方法,即 g1、g2、gfg1 和 gfg2。因此,我们可以看到 GeeksforGeeks 类继承自两个模块。因此,我们可以说 GeeksforGeeks 类显示了 mixin。

考虑下面的例子进行说明。
示例 #2:

# Modules consist a method
module Child_1
  def a1
   puts 'This is Child one.'
  end
end
module Child_2
  def a2
   puts 'This is Child two.'
  end
end
module Child_3
  def a3
   puts 'This is Child three.'
  end
end
  
# Creating class
class Parent
  include Child_1
  include Child_2
  include Child_3
  def display
   puts 'Three modules have included.'
  end
end
  
# Creating object
object = Parent.new
  
# Calling methods
object.display
object.a1
object.a2
object.a3

输出

Three modules have included.
This is Child one.
This is Child two.
This is Child three.

在上面的例子中,模块Child_1由方法 a1 组成,类似模块Child_2Child_3由方法 a2 和 a3 组成。 Parent 类包括模块 Child_1、Child_2 和 Child_3 。 Parent类还包括一个方法 display。正如我们所见,Parent 类继承自所有三个模块。 Parent 类显示多重继承或混合。