委托给包含模块中定义的方法

Sig*_*Sig 1 ruby

Ruby(2.5)中是否有一种方法super可以以与继承相同的方式调用包含模块中定义的方法?

我的意思是,假设我有以下内容

class Parent
 def name
  "parent"
 end
end

class Child < Parent
  def name
   "my parent is #{super}"
  end
end
Run Code Online (Sandbox Code Playgroud)

当我打电话时Child.new.name,我明白了my parent is parent.

如何在以下情况下实现同样的目标?

module Parent
 def name
  "parent"
 end
end

class Child 
  include Parent

  def name
   "my parent is #{???}"
  end
end
Run Code Online (Sandbox Code Playgroud)

我该怎么替换???

谢谢

小智 6

你仍然可以使用super:

module Parent
 def name
  "parent"
 end
end

class Child 
  include Parent

  def name
   "my parent is #{super}"
  end
end

Child.new.name # => "my parent is parent"
Run Code Online (Sandbox Code Playgroud)

当包含一个模块时,ruby会将这个模块添加到继承链中.

Child.ancestors # => [Child, Parent, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)

因此,要求superChild会调用相应的方法,它的祖先.

  • 好一个.但为什么这有效呢?一个解释(即使是一个简短的解释)将大大增加这个答案. (3认同)