Bru*_*nes 5 ruby instance-variables
这怎么办?
class A
attr_accessor :name
def initialize params
@name = params[:name]
@collection << B.new
end
end
class B < A
def initialize
@my_name = lookup_something(<parent.name>)
end
end
Run Code Online (Sandbox Code Playgroud)
基本上,我需要父类中的值来在子类的查找中使用,但是如果有更好的方法,我不想明确地传递它.父类的实例var是否在子类中完全无法访问?或者这只是糟糕的层次结构设计?
我真的不知道你在这里要做什么 - 你发布的所有代码都适用于实例变量.实例变量是每个对象,而不是每个类,所以当你说"我需要来自父类的值"时,我不知道你的意思.
我在您的代码中注意到以下几点:
B对象A#initialize并不是一件好事,因为基础使用子类.B#initialize用完全不同的行为覆盖了这个类A#initialize.B.new('myname')变量时@name从未分配,因为A#initialize永远不会调用该方法.您必须要么调用super(:name => name)(运行超类initialize),要么必须@name直接分配B#initialize@name定义,所有实例方法都可以使用其值.包括在父/超类中定义的那些.让我说我不太清楚为什么你在这里使用遗产,我觉得它不是你想要的.如果你有两个类用于两个不同的东西,那么永远不应该涉及继承.如果你想重新使用代码,要么看看Ruby的混入功能,或撰写有你想重新使用行为中的一些"小"对象的复杂对象.