我正在试图弄清楚这段代码在做什么,我猜测了一下。我很熟悉为实例变量赋值,但我不确定其余的。
我如何阅读player_1
:如果player_1
传递了值,请将其分配给实例变量@player_1
,并创建Human
的新实例类。我错过了什么吗?
def initialize(player_1 = nil, player_2 = nil, board = nil)
player_1 ? @player_1 = player_1 : @player_1 = Players::Human.new("X")
player_2 ? @player_2 = player_2 : @player_2 = Players::Human.new("O")
board ? @board = board : @board = Board.new
@current_player = @player_1
end
module Players
class Human < Player
def move(board)
input = gets.strip
end
end
end
答案 0 :(得分:5)
基本上将@player_1
,@player_2
和@board
个实例变量分配为具有相同名称的参数。如果缺少某些内容,则会有一个默认值。默认值分别是“具有X
的人类玩家”,“具有O
的人类玩家”和“新棋盘”。看起来像Tic-Tac-Toe设置。
更可读的方式是:
def initialize(first_player = nil, second_player = nil, board = nil)
@first_player = first_player || Players::Human.new("X")
@second_player = second_player || Players::Human.new("O")
@board = board || Board.new
@current_player = @first_player
end
答案 1 :(得分:2)
初始化的所有参数都是可选的,如果没有设置则为nil。当你调用initialize时,如果它是nil,它将检查每个变量。如果它不是nil,它只是将参数值赋给实例变量,否则它将创建一个Player :: Human或Board。最后,它将current_player分配给player_1。