红宝石混合
在学习 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_2和Child_3由方法 a2 和 a3 组成。 Parent 类包括模块 Child_1、Child_2 和 Child_3 。 Parent类还包括一个方法 display。正如我们所见,Parent 类继承自所有三个模块。 Parent 类显示多重继承或混合。