2

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

4

2 回答 2

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'。

于 2011-02-19T23:01:35.770 回答
0

Mutu,您需要学习 ruby​​ 的基础知识……您所拥有的甚至不是有效的 ruby​​ 代码。

尝试运行这个。

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

在 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"
于 2011-02-19T19:43:44.463 回答