使用Ruby散列键作为参数
我试图使用一个参数作为我的键来在散列中查找值,我只是不明白为什么我不能通过第一种方法获取值。我对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不
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]