2017-10-09 92 views
1

我想使用一個參數作爲我的關鍵在哈希中查找值,我只是困惑爲什麼我不能通過第一種方式獲取值。我是Ruby的新手。使用Ruby散列鍵作爲參數

def getCards(player,hash) 
    a =$player 
    puts "a = "+a.to_s 
    puts "a.class = "+a.class.to_s 

    puts " hash[:a]"+" #{hash[:a]}" 
    puts " hash[:'1']"+" #{hash[:"1"]}" 

end 

編輯:

def getCards(player,hash) 
    puts player 
    #result successfully 1 or any number that I gets from console 

    puts hash[player] 
    # nothing but 1 is actually a key in my hash 

# {1=>["yellow3", "yellow8", "green9", "black11", "red1", "black7", "red5", #"yellow7", more results .. 

end 
+0

hash [「1」]返回我需要的結果,但是爲什麼我不能使用變量作爲參數鍵來獲取值? –

回答

2

注意,Ruby是不是PHP或Perl,所以這應該是player而不是$player。參數名稱及其作爲變量的相應用法是相同的。

$player指的是該名稱的全局變量,這是不相關的,並且將被假定爲未定義,除非另有設置。

現在,如果通過hash[:a]你的意思是訪問與您分配給a那麼你真正想要的球員值項下的哈希值的內容是:

hash[player] 

凡表示仰視的輸入該密鑰。 a在這種情況下是一個變量,:a符號「a」只是一個常數,就像一個標籤,它與變量無關。

不要忘記,"#{x}"等於x.to_s所以只需使用插值而不是這種尷尬"..." + x.to_s串聯。

要記住的另一件事是在Ruby情況下具有重要意義。變量和方法名稱應遵循get_cards樣式。類是ClassName,常量類似於CONSTANT_NAME

+0

感謝您的回答,但爲什麼我不能分配= = $玩家? –

+0

你可以這樣做,但這並不意味着什麼,因爲'$ player'是'nil',並且與'player'參數完全無關。僅僅因爲它是有效的Ruby代碼並不意味着它按照您的預期工作。 – tadman

+0

高清getCards(播放器,哈希) 使玩家//導致1 把哈希[播放] 結果爲零 結束 –