来自父类的Ruby调用子方法

时间:2012-09-18 13:56:38

标签: ruby-on-rails ruby superclass

我在rails中编写一个程序,其中一个类与另一个类具有相同的行为。唯一的区别是有一个类变量@secret_num,它在两个类之间的计算方式不同。我想调用一个特定的超类方法,但使用子类中的类变量。棘手的是类变量不是常量,所以我在自己的方法中设置它。有什么方法可以做我在下面尝试做的事情吗? 感谢

Class Foo
  def secret
    return [1,2,3].sample
  end

  def b
    @secret_num = secret
    ... # lots of lines of code that use @secret_num
  end
end

Class Bar < Foo
  def secret
    return [4, 5, 6].sample
  end

  def b
    super    # use @secret_num from class Bar.
  end
end    

这不起作用,因为对super的调用也称为父类的secret方法,即Foo#secret,但我需要使用密码来自子类,即Bar#secret

1 个答案:

答案 0 :(得分:3)

class Foo
  def secret
    [1,2,3].sample
  end

  def b(secret_num = secret)
    <lots of lines of code that use secret_num>
  end
end

class Bar < Foo
  def secret
    [4, 5, 6].sample
  end
end    

注意,您不需要将secret作为参数传递给b。只要您不在子类中重新定义b,继承就会负责调用secret的正确实现。

我的偏好是将它作为一个参数,以便我可以在测试中传递各种值。