2017-10-09 101 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 把哈希[播放] 结果为零 结束 –