Foo
和Baa
两个模块分别定义了一个同名方法name
,我做了include Foo
和 在特定上下文中包含 Baa
。
当我调用name
时,如何区分是调用Foo
的name
方法还是Baa
?
最佳答案
只有模块包含的顺序决定调用哪个模块。两者不能同名 - 后者将覆盖前者。
当然,你可以做任何技巧,就在我的脑海里:
module A
def foo
:foo_from_A
end
end
module B
def foo
:foo_from_B
end
end
class C
def initialize(from)
@from = from
end
def foo
from.instance_method(__method__).bind(self).call
end
private
attr_reader :from
end
C.new(A).foo #=> :a_from_A
C.new(B).foo #=> :a_from_B
但这对现实生活中的用例没有好处:)
关于ruby - 如何解决 ruby 中的名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485234/