初始化中的Ruby代码有什么作用?

时间:2017-12-14 14:09:21

标签: ruby initialization

我正在试图弄清楚这段代码在做什么,我猜测了一下。我很熟悉为实例变量赋值,但我不确定其余的。

我如何阅读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

2 个答案:

答案 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。