两个模块Foo和Baa分别定义了一个具有相同名称的方法,我确实包含了Foo并在特定的上下文中包含了Baa.
当我打电话给名字时,我怎么能消除是否要调用Foo或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
但这对现实生活中的用例没有好处:)