首页 > 解决方案 > 如何在不创建该类的新实例的情况下从另一个类访问类实例变量

问题描述

我有一个Board创建哈希的类:

class Board
  attr_accessor :board

  def initialize
    @board = {}
  end

  def generate_board
    i = 0
    until i == 8
      @board[i] = [" . ", " . ", " . ", " . ", " . ", " . ", " . "," . "]
      i += 1
    end
  end
end

我正在尝试从不同的类访问它:

class Pawn
  def legal_moves
    possible_moves = []
    if @board[@position[0] + 1][@position[1] + 1].is_a? Piece
      possible_moves << [[@position[0] + 1, @position[1] + 1]]
    end
    if @board[@position[0] + 1][@position[1] - 1].is_a? Piece
      possible_moves << [[@position[0] + 1, @position[1] - 1]]
    end
    @legal_moves = possible_moves
  end
end

如何在不创建新板对象的情况下访问此保存的板状态?我无法创建新的板子对象,因为板子的状态需要保持不变。我已经在玩游戏的不同类中创建了一个原始实例。

标签: ruby

解决方案


如果您想获得更多面向对象编程的经验,可以使用单例模式

require 'singleton'

class Board
  include Singleton

  attr_accessor :board

  def generate_board
    @board = {}
    i = 0
    until i == 8
      @board[i] = [" . ", " . ", " . ", " . ", " . ", " . ", " . "," . "]
      i += 1
    end
  end
end

在这种情况下,要生成,您应该调用:Board.instance.generate_board

当你需要从其他类访问board时,你可以在 init 中添加一行:

class Pawn
  def initialize
    @board = Board.instance.board
  end
end

现在您可以像在示例中那样使用@board内部Pawn对象:

@board[@position[0] + 1][@position[1] + 1]

祝你好运!


推荐阅读