Ruby: доступ к переменным экземпляра класса из одного класса в методе класса другого класса - PullRequest
2 голосов
/ 19 февраля 2011

Я работаю над программой 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 ]

3 голосов
/ 20 февраля 2011

Если вы хотите создать инициализатор нового типа для 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'.

0 голосов
/ 19 февраля 2011

Муту, тебе нужно изучить основы 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"
...