1
我正在尋找一些關於動態變量的建議。特別是如果我充分利用instance_variable_set
或者我應該看到更好的方法。提前感謝您的任何建議。現在代碼。動態變量值
我正在創建一個二十一點遊戲。我有兩個value_creator
方法看起來像這樣:
class Blackjack
def dealers_card_value_creator
@card_value = @hit_dealer
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if @dealers_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack|Queen|King/)
@card_value = 10
else
puts "there was an error. please try again."
end
@hit_dealer = @card_value
@dealers_hand = @dealers_hand + @hit_dealer
if @dealers_hand > 21 then puts "Dealer went over 21. You won $#{@bet}. Nice!"
deal end
end
def players_card_value_creator
@card_value = @hit_player
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if @players_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack|Queen|King/)
@card_value = 10
else
puts "there was an error. please try again."
end
@hit_player = @card_value
@players_hand = @players_hand + @hit_player
if @players_hand > 21 then puts "You went over 21. You lost $#{@bet}. Try again."
deal end
end
end
你可以看到,他們基本上是相同的。所以我創建了這個方法供經銷商和玩家使用。
def value_creator(string)
hit = "@#{string}" #returns either @player or @dealer
instance_variable_set(hit, "#{@hit_card}")
@card_value = hit
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if "@#{string}"_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack/)
@card_value = 10
when @card_value.match(/Queen/)
@card_value = 10
when @card_value.match(/King/)
@card_value = 10
else
puts "there was an error. please try again."
end
"@#{string}" = @card_value
"@#{string}"_hand = "@#{string}"_hand + "@#{string}"
end
def hit_dealer
@hit_card = @shuffled_deck.pop
value_creator("dealer")
end
def hit_player
@hit_card = @shuffled_deck.pop
value_creator("player")
end
但是當我嘗試調用"@#{string}"
值與hit_player
返回@player
,沒有被分配的值。
很多代碼,但我希望它有助於更好地理解我正在嘗試做什麼,並將有助於更好地指導建議。再次,在此先感謝。
感謝這個作品。因此,檢索該值的最佳方法是使用'instance_variable_get',是否存在'hit =「@#{string}」上的任何變化''你知道會返回值,而不是字符串?再次感謝。 – Alekx 2012-02-20 23:29:47
'hit = eval(「@#{string}」)' - 但eval是邪惡的。 – knut 2012-02-20 23:31:26
哈哈,再次感謝! – Alekx 2012-02-20 23:39:47