我正在通過Chris Pine的'Learn to Program'學習Ruby。我試圖應付沒有全球變數。我有一個馬虎看起來命令提示符二十一點程序(不能拆分)我的前三個方法說明我遇到的問題。在Pascal中,我會使用全局變量,並使用方法來操作這些全局變量。它看起來像這樣(使用Ruby語言僞)我使用什麼策略來避免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。我可以將這兩個數組推入另一個數組並返回,但這看起來不像是簡化了任何事情。
是否有一個處理這個問題的一般策略,還是每種情況都有其獨特的解決方案?
想到的另一種情況是國際象棋程序。爲什麼把國際象棋棋盤變成全局變量是沒有意義的,因爲國際象棋程序中幾乎所有的方法都需要使用它的價值?