我正在通过 Chris Pine 的“Learn to Program”学习 Ruby。我试图在没有全局变量的情况下应对。我有一个看起来很草率的命令提示符二十一点程序(还不能拆分) 我的前三种方法说明了我遇到的问题。在 Pascal 中,我会使用全局变量,并使用方法来操作这些全局变量。它看起来像这样(使用 ruby 伪语言)
$deck_of_cards = []
$player_hand = []
$dealer_hand = []
def create_deck
$deck_of_cards = #numbers 1-52
end
def shuffle_deck
$deck_of_cards = #shuffled up deck of cards
end
def opening_deal
2.times do
$player_hand.push $deck_of_cards.pop
$dealer_hand.push $deck_of_cards.pop
end
end
create_deck
shuffle_deck
opening_deal
我最终会得到一个洗牌的牌组、一个玩家手和一个庄家手。
去掉全局变量,前两个方法现在看起来像这样:
def create_deck deck_of_cards
deck_of_cards = #numbers 1-52
return deck_of_cards
end
def shuffle_deck deck_of_cards
deck_of_cards = #shuffled up deck of cards
return deck_of_cards
end
deck = create_deck([])
deck = shuffle_deck(deck)
这感觉有点奇怪,但我可以习惯它。
但是我完全坚持最后一种方法,它需要返回两个变量,player_hand 和dealer_hand。我可以将这两个数组推入另一个数组并返回它,但这似乎并没有简化任何事情。
是否有解决此问题的一般策略,或者每种情况都有其独特的解决方案?
想到的另一种情况是国际象棋程序。为什么将棋盘设为全局变量没有意义,因为国际象棋程序中的几乎所有方法都需要使用它的值?