【发布时间】:2017-10-21 18:46:43
【问题描述】:
假设我分别使用了两个宝石,即“A”和“B”。 gem A 定义模块 A 如下所示。
module A
def a
puts "i am from module A"
end
end
Gem B 定义模块 B 如下图
module B
def a
puts "i am from module B"
end
end
现在我可以在 C 类中包含模块 B 和 A。
class C
include B
include A
end
c = C.new
c.a #i am from module A
现在两个模块都定义了方法a。在现实世界中,一个 gem 中定义的方法名称很有可能与另一个 gem 的方法名称发生冲突。在这种情况下,处理这种情况是开发人员的责任还是 Rails (Ruby) 提供了一些东西来处理这种情况?
【问题讨论】:
-
这与Rails无关,它是由Ruby语言处理的。在这种情况下,
include A会覆盖来自module B的a函数,因为它是最后包含的。 -
“在现实世界中,一个 gem 中定义的方法名称很有可能会与另一个 gem 的方法名称发生冲突” 根据我的经验,并非如此。那些依赖于使用
include导入的 gem 通常会占用很小的空间。
标签: ruby