我在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
。
答案 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
的正确实现。
我的偏好是将它作为一个参数,以便我可以在测试中传递各种值。