我正在研究一个ruby程序并遇到了以下问题。
我有两个类AClass和BClass如下:
class AClass
attr_accessor :avar
def initialize(input)
@avar = input
end
end
class BClass
def BClass.build(aclass)
bvalue = aclass.avar
....
end
end
当我跑步时:
aclass = AClass.new
puts aclass.avar
bclass = BClass.build(aclass)
前两行很好用。 aclass是初始化的,avar被放到屏幕上,但第三行会产生错误。我似乎BClass构建方法无法访问AClass实例变量。我需要做些什么来完成这项工作。我以为attr_accessor会让我访问AClass实例变量。提前感谢您的意见。
答案 0 :(得分:3)
如果要为BClass创建新类型的初始化程序,可以执行以下操作:
class AClass
attr_accessor :avar
def initialize(input)
@avar = input
end
end
class BClass
attr_accessor :bvalue
def self.build(aclass)
bclass = self.new
bclass.bvalue = aclass.avar
bclass
end
end
aclass = AClass.new 'ruby'
bclass = BClass.build aclass
这将设置bclass.bvalue = aclass.avar ='ruby'。
答案 1 :(得分:0)
Mutu,你需要学习红宝石的基础知识......你所拥有的东西甚至没有有效的红宝石代码。
试试这个。
class AClass
attr_accessor :avar
def initialize(input)
@avar = input
end
end
class BClass
attr_reader :bvalue
def initialize(aclass)
@bvalue = aclass.avar
end
end
in irb
ruby-1.9.2-p136 :077 > a = AClass.new('ruby')
=> #<AClass:0x00000100997298 @avar="ruby">
ruby-1.9.2-p136 :078 > b = BClass.new(a)
=> #<BClass:0x000001009921d0 @bvalue="ruby">
ruby-1.9.2-p136 :079 > b.bvalue
=> "ruby"
ruby-1.9.2-p136 :080 > a.avar
=> "ruby"