使用Ruby散列键作为参数

使用Ruby散列键作为参数,ruby,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 编辑: 注意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
编辑:


注意Ruby不是PHP或Perl,所以应该是
player
,而不是
$player
。参数名称及其作为变量的对应用法是相同的

$player
引用该名称的全局变量,该变量不相关,除非另有设置,否则将假定为未定义

现在,如果通过
hash[:a]
您的意思是使用分配给
a
的播放器值访问密钥下的哈希内容,那么您实际需要的是:

hash[player]
其中表示使用该键查找条目
a
是一个变量在这种情况下,
:a
是符号“a”,它只是一个常量,就像标签一样,与变量无关

不要忘记,
“#{x}”
相当于
x.to_s
,所以只需使用插值而不是这种笨拙的
“…”+x.to_s
串联


另一件需要记住的事情是,在Ruby中,case具有重要的意义。变量和方法名称应遵循
get\u cards
样式。类是
ClassName
,常量是
CONSTANT\u NAME

谢谢你的回答,但是为什么我不能分配一个=$player呢?你可以这样做,但它在这里没有任何意义,因为
$player
nil
并且与
player
参数完全无关。仅仅因为它是有效的Ruby代码并不意味着它能像您期望的那样工作。def getCards(player,hash)puts player//result 1 puts hash[player]result nil endI give player=1,并且成功地puts 1,为什么hash[player]返回nil?和player.class=stringThank tadman,我通过更改密钥的类型解决了这个问题,我使用int作为密钥,通过放置hash[players.to_I]可以很好地工作,player是以前发送的参数。hash[“1”]返回我需要的结果,但是为什么我不能使用变量作为参数密钥来获取值?
hash[player]