ruby - 如何在不创建该类的新实例的情况下从另一个类访问类实例变量
问题描述
我有一个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
如何在不创建新板对象的情况下访问此保存的板状态?我无法创建新的板子对象,因为板子的状态需要保持不变。我已经在玩游戏的不同类中创建了一个原始实例。
解决方案
如果您想获得更多面向对象编程的经验,可以使用单例模式:
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]
祝你好运!
推荐阅读
- mongodb - 如何在两个集合中更新 mongodb
- sql-server - 如何从一组数据中返回空值以在 SQL 中显示
- flutter - 如何在颤动中从谷歌地图中获取取消选择标记的回调?
- docker - 在端口 80 上运行的 docker 容器的 Nginx 反向代理
- asynchronous - 如何让不和谐机器人处理单独的进程/链接到另一个机器人
- python - python socket可以在世界各地使用吗?
- python - 如何在列表中捕获 3 True?
- python - py 文件末尾的 ModuleNotFoundError 异常
- wordpress - 将three.js 包含到wordpress 主题中
- loops - 自动数字 V4。不能再遍历元素