MST

星途 面试题库

面试题:Ruby模块与混合机制下的方法冲突处理

假设你有两个模块A和B,它们都定义了一个同名方法method。现在有一个类C同时混入了模块A和B,在类C的实例调用method方法时,Ruby是如何确定调用哪个模块的method方法的?如何手动指定调用特定模块的method方法?
12.9万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

在Ruby中,当一个类C同时混入了模块AB,且这两个模块都定义了同名方法method,Ruby会按照混入模块的顺序来确定调用哪个模块的method方法。先混入的模块中的方法会被优先调用。

例如,如果代码是这样:

module A
  def method
    puts "This is method from module A"
  end
end

module B
  def method
    puts "This is method from module B"
  end
end

class C
  include A
  include B
end

c = C.new
c.method

上述代码中,C类先includeA模块,再includeB模块,那么调用c.method会输出 "This is method from module A"。

如果要手动指定调用特定模块的method方法,可以使用模块名作为前缀来调用。例如,要调用模块Bmethod方法,可以这样做:

c = C.new
B.method(c)

这里通过B.method(c)的方式手动调用了模块Bmethod方法,并将c作为接收者传递进去。这种方式通常用于需要明确调用特定模块中同名方法的场景。