如何在Ruby中引用对象的"Owner"?
How to refer to an object's "Owner" in Ruby?
"Owner" 可能不是正确的术语,但我不知道是什么,所以搜索起来非常困难。
我在做一个纸牌游戏,每个玩家可以有多张手牌。
我有一个 "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 上调用的属性或方法,它会引用其 "owner"、player1?
我期待
hand1.owner
=> #<Player:0x007fb6ae05b448
# @behavior=:human,
# @hands=[#<Hand:0x007fb6ad8653b0 @cards=[{:A,:spades},{:Q,:hearts}]>],
# @money=800,
# @name="Dougie Jones">
不行,没办法。一个对象不知道你把它放在哪里。你可能把它放在很多不同的地方,那么谁是主人呢?您需要手动设置关系或考虑更改设计。
考虑一下:
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>
您可以交叉引用具有属性的对象。 (每个 Hand
对象都可以引用特定的 Player
对象)
例如,您可以向 Hand
模型添加一个属性:
class Hand
attr_accessor :player
end
然后当你创建一个新的Hand
时,你可以设置player
:
player1 = Player.new
hand1 = Hand.new
hand1.player = player1
这基本上就是 ActiveRecord associations 的工作方式。
"Owner" 可能不是正确的术语,但我不知道是什么,所以搜索起来非常困难。
我在做一个纸牌游戏,每个玩家可以有多张手牌。
我有一个 "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 上调用的属性或方法,它会引用其 "owner"、player1?
我期待
hand1.owner
=> #<Player:0x007fb6ae05b448
# @behavior=:human,
# @hands=[#<Hand:0x007fb6ad8653b0 @cards=[{:A,:spades},{:Q,:hearts}]>],
# @money=800,
# @name="Dougie Jones">
不行,没办法。一个对象不知道你把它放在哪里。你可能把它放在很多不同的地方,那么谁是主人呢?您需要手动设置关系或考虑更改设计。
考虑一下:
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>
您可以交叉引用具有属性的对象。 (每个 Hand
对象都可以引用特定的 Player
对象)
例如,您可以向 Hand
模型添加一个属性:
class Hand
attr_accessor :player
end
然后当你创建一个新的Hand
时,你可以设置player
:
player1 = Player.new
hand1 = Hand.new
hand1.player = player1
这基本上就是 ActiveRecord associations 的工作方式。