考虑下面的代码:为什么Ruby不能找到调用者类中定义的常量?
class MyClass
def foo_via_method
foo_method
end
def foo_via_constant
FOO_CONSTANT
end
end
class SubClass < MyClass
FOO_CONSTANT = "foo"
def foo_method
FOO_CONSTANT
end
end
两个实例此方法的行为是不同的:
sub_class_instance = SubClass.new
### THIS WORKS ###
sub_class_instance.foo_via_method
# => "foo"
### THIS DOESN'T ###
sub_class_instance.foo_via_constant
# NameError: uninitialized constant MyClass::FOO_CONSTANT
引用的方法在子类中的版本返回所需的值,而是指版本子类中的常量会引发错误。所以难题是这样的:为什么使用方法的版本可以工作,但使用常量的版本会失败?
这对我来说是一个难以理解的设计。在OOP中,我永远不会期望能够查找在子类中定义的某些东西,除非(我的理解是对此的价值存在争议)一种行为被覆盖的方法。当然,你永远不应该期望只有在子类中定义的东西才能被父类看到。 –
来自我:使用方法的版本 - 在类SubClass的范围内调用常量,以便在另一个函数中调用'FOO_CONSTANT',它试图在MyClass的范围内找到这个常量,以使其可行:写'SubClass :: FOO_CONSTANT' –