【发布时间】:2015-05-11 18:45:09
【问题描述】:
我正在尝试做我在标题中描述的事情,因为我想在父类中使用子类的类变量值。实际上,我找到了一种方法,但我觉得我可以做一些更好的事情。这是我当前的代码:
class Parent
def self.test_settings
const_set "PATH", "/tmp/#{self.name}"
end
end
class Sub1 < Parent
def self.name
"one"
end
test_settings if Rails.env.test?
end
class Sub2 < Parent
def self.name
"two"
end
test_settings if Rails.env.test?
end
我的原始版本 - 不起作用,是:
class Parent
def self.test_settings
const_set "PATH", "/tmp/#{@@name}"
end
test_settings if Rails.env.test?
end
class Sub1 < Parent
@@name = "sub1"
end
class Sub2 < Parent
@@name = "sub2"
end
我会解释一下:我使用了一个类方法,而不是我之前尝试过的变量 (@@name),但没有成功。此外,我必须将函数调用 test_settings if Rails.env.test? 移动到子类,因为如果我将这段代码放在那里,它会将 self 视为父类。
如果有任何改进它的建议以及为什么我最初的想法(使用@@name 并在父类中调用 test_settings 方法)不起作用,我将不胜感激。
【问题讨论】:
-
您的代码中是否有相同的拼写错误(
Paernt而不是Parent,Rail而不是Rails)? -
@@name被称为类变量,它将为您提供最新的值,并且它是跨继承的共享变量。其他问题我没有感到抱歉。 :) -
请注意,实现
self.name覆盖/阴影Module#name
标签: ruby inheritance class-variables