2017-12-14 1 views
0

나는이 코드가 무엇을하는지 알아 내려고하고 있는데, 나는 추측을 가지고있다. 인스턴스 변수에 인수를 할당하는 것에 익숙하지만 나머지는 잘 모르겠습니다. 이 초기화 루비 코드는 무엇을합니까?

내가 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 

답변

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 
+2

솔직히 나는'초기화 (first_player = Players :: Human.new ("X"), second_player = Players :: Human.new ("O"), board = Board.new)'인스턴스를 설정할 수 있습니다. 조건없는 변수. – engineersmnky

+1

@ engineersmnky, 동의합니다. 내 생각에 이렇게하면'second_player'에 대한 값을 설정하지 못하게되지만'first_player'에 대한 기본값을 유지합니다. 이상적으로는, 그들은 모두 kwargs해야합니다. – ndn

+0

나는 kwargs 코멘트에 확실히 동의 할 수있다 – engineersmnky

2

initialize의 모든 인수는 선택 사항이며, 설정하지 않으면 nil입니다. 초기화를 호출하면, 변수가 nil이면 각 변수를 검사합니다. 그것이 nil이 아니라면 인스턴스 변수에 매개 변수 값을 할당하고 그렇지 않으면 Player :: Human 또는 Board를 만듭니다. 마지막으로 current_player를 player_1에 할당합니다.

+0

나는 당신의 설명을 많이 좋아는 의미가 있습니다. – alexnewby