Доступ к переменным экземпляра между классами в Ruby без создания нового объекта - PullRequest
0 голосов
/ 30 ноября 2011

Я работаю над реализацией шашек.У меня есть класс как (показаны только соответствующие части):

class Game
  attr_accessor :current_player

  def initialize
    @gui = Gui.new
    @current_player = :red
  end
end

, и у меня есть:

class Gui
  def move_request
    "#{Game.current_player.to_s.upcase} make move(x1, y1, x2, y2): "
  end
end

Я получаю эту ошибку:

gui.rb:8:in `move_request': undefined method `current_player' for Game:Class (NoMethodError)

Iя не хочу создавать новый объект Game в классе Gui, но я хочу, чтобы класс Gui имел доступ к состоянию переменной экземпляра current_player.Есть мысли о том, что мне делать?

1 Ответ

2 голосов
/ 30 ноября 2011

Переменная экземпляра даже не существует без экземпляра, поэтому вы не можете получить к ней доступ так, как вам требуется.

Возможно, вы захотите сделать что-то вроде передачи ссылки на игру при создании Gui:

class Game
  attr_accessor :current_player

  def initialize
    @gui = Gui.new(self)
    @current_player = :red
  end
end

class Gui
  def initialize(game)
    @game = game
  end

  def move_request
    "#{@game.current_player.to_s.upcase} make move(x1, y1, x2, y2): "
  end
end

Существуют и другие способы достижения этой цели, которые лучше всего зависят от вашего более широкого варианта использования.

...