为什么我的哈希值显示一个值,但是当我用[]访问它时,它返回为零?

时间:2012-06-09 15:39:20

标签: ruby sinatra

我有这段代码,试图调试回到我服务器的内容:

task = JSON.parse(request.body.read)

puts task.inspect
puts 'description hash: ' 
puts task[:description]

当这段代码运行时,我得到:

{"completed" => false, "task_type" => 0, "description"=> "second task"}
description hash: 
nil

是否有不同的方式来访问此哈希?因为从我看到的检查显示了描述值。

2 个答案:

答案 0 :(得分:4)

问题

在您给出的示例中,您要定义一个哈希键" description"但是查找:描述键,而不是存在。原因是第一个是String,第二个是Symbol。

"description".class
=> String

:description.class
=> Symbol

解决方案

要么用字符串查找你的密钥,要么你知道你的密钥总是一个字符串,但是你的下标可能不是。

task['description']
=> "second task"

task[:description.to_s]
=> "second task"

答案 1 :(得分:1)

:description'description'不同。这应该有效:

puts task['description']