Ruby:从另一个类的类方法中的一个类访问类实例变量

时间:2011-02-19 19:20:24

标签: ruby instance-variables attr-accessor

我正在研究一个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实例变量。提前感谢您的意见。

2 个答案:

答案 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"