2017-09-17 1 views
0

"소유자"는 아마도 이에 대한 올바른 용어는 아니지만 그게 무엇인지 모르기 때문에 검색을 매우 어렵게 만듭니다.Ruby에서 객체의 "소유자"를 참조하는 방법은 무엇입니까?

나는 카드 게임을 만들고 있으며, 각 플레이어는 여러 장의 카드를 가질 수 있습니다.

"Player", "Hand"및 "Card"클래스가 있습니다.

player1 = Player.new 
hand1 = Hand.new # => A new hand of two random cards 

player1.hands.push(hand1) 

#Now player1 has one hand with two cards in it. 

나는 그것의 "소유자", 재생기를 참조합니다 hand1에 전화를 할 수있는 속성이나 방법이 있습니까?

내가

hand1.owner 

=> #<Player:0x007fb6ae05b448 
# @behavior=:human, 
# @hands=[#<Hand:0x007fb6ad8653b0 @cards=[{:A,:spades},{:Q,:hearts}]>], 
# @money=800, 
# @name="Dougie Jones"> 
+1

나는 이것이 단지 예일 수도 있지만 플레이어를 결정하기 위해 손을 쿼리해야한다면, 당신이 뭔가 잘못 모델을 작성했다고 말하고 싶습니다. –

+1

@MarkThomas에 동의해야 할 것입니다. 왜 '핸드'는 '플레이어'를 알아야합니까? 우리가 "물고기 가라"를하고 있다고 가정 해 봅시다 ... 당신은'플레이어 '에게'핸드'의'카드'에 대해 '핸드'에게'플레이어 '에 대해 묻지 않을 것을 요청할 것입니다. '핸드 '는'카드'에 대해서만 알고 있어야하고'플레이어'는'핸드'에 대해 알아야하고'핸드'를 통해'카드'에 대해 안다 – engineersmnky

+0

그것은 블랙 잭 게임이고 때로는 총 4 개까지 두 손에 손을. 저는 각 핸드를 "플레이"하고 핸드 클래스에서 모든 플레이어와 AI 결정을하도록하는 것이 더 쉬웠습니다. 나는 두 배가되고 나누는 것이 그의 선수가 충분한 돈이 있는지 알아 내기 위하여 손을 요구했다는 것을 깨달을 때까지 곤경에 빠지지 않았다. 어쨌든 Player 클래스에 여전히 많은 게임 플레이 메서드가 있기 때문에 아마 다르게 구조화 될 것입니다 ... –

답변

1

없음 같은 것을 기대하고있어, 방법이 없습니다. 물건은 물건을 보관하는 곳을 모른다. 당신은 많은 다른 장소에서 그것을 지킬 수 있습니다, 누가 그때 주인이 될 것입니까? 관계를 수동으로 설정하거나 디자인 변경을 고려해야합니다.

이를 생각해 속성

class Player 
    attr_accessor :hands 

    def initialize 
    @hands = [] 
    end 

    def add_hand(hand) 
    hand.player = self 
    @hands << hand 
    end 
end 

class Hand 
    attr_accessor :player 
end 

player = Player.new 
hand = Hand.new 
player.add_hand(hand) 
puts hand.player #=> #<Player:0x000000017b2978> 
+0

예! 고맙습니다! Player 클래스의 new_hand 메서드에서 .player 특성을 추가하는 것은 플레이어의 고유 식별자를 new_hand 메서드에 추가 매개 변수로 전달한 다음 Hand 속성의 특성으로 바꾸는 것보다 훨씬 간단합니다. 클래스 '이니셜 라이저. 감사! –

1

당신이 할 수있는 상호 참조 개체를.

: 당신은 player을 설정할 수 있습니다

class Hand 
    attr_accessor :player 
end 

을 다음 새 Hand을 만들 때 :

예를 들어, 당신이 당신의 Hand 모델에 속성을 추가 할 수 있습니다 (모든 Hand 객체는 특정 Player 객체를 참조 할 수 있습니다)

player1 = Player.new 
hand1 = Hand.new 
hand1.player = player1 

이것은 본질적으로 ActiveRecord associations의 작동 방식입니다.

관련 문제