【问题标题】:Ruby: Accessing class instance variables from one class in another class's class methodRuby:从另一个类的类方法中的一个类访问类实例变量
【发布时间】:2011-02-19 19:20:24
【问题描述】:

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

【问题讨论】:

  • avar 和 avar1 有 2 个不同的变量。第一行 class AClass(input) 也不是 ruby​​...
  • Augusto,抱歉打错了。这两个变量都应该是 avar。我已经进行了更正。谢谢。
  • 但还是在正确的地方输入?
  • 津巴巴 - 你是对的。输入在错误的地方。谢谢。
  • 为了将来参考,具有AClass 类的对象通常称为a_class,而不是aclass

标签: ruby instance-variables attr-accessor


【解决方案1】:

如果要为 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'。

【讨论】:

  • 潘-谢谢。现在我看到了,它是有道理的。
【解决方案2】:

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"

【讨论】:

  • 我试图在没有写出所有代码的情况下传达我的问题的要点,但也许我没有提供足够的信息。让我再试一次。再次感谢。
猜你喜欢
  • 2020-03-19
  • 2011-04-28
  • 2015-01-21
  • 2012-05-21
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多