我认为我误解了以下代码中的哈希值:
require 'rest-client'
require 'json'
def get_from_mashable
res = JSON.load(RestClient.get('http://mashable.com/stories.json'))
res["hot"].map do |story|
s = {title: story["title"], category: story["channel"]}
add_upvotes(s)
end
end
def add_upvotes(hash)
hash.map do |story|
temp = {upvotes: 1}
if story[:category] == "Tech"
temp[:upvotes] *= 10
elsif story[:category] == "Business"
temp[:upvotes] *= 5
else
temp[:upvotes] *= 3
end
end
hash.each {|x| puts x}
end
get_from_mashable()
我从中得到以下错误:
ex_teddit_api_news.rb:16:in `[]': no implicit conversion of Symbol into Integer (TypeError)
我正在尝试将upvotes
键和相应的整数值添加到从get_from_mashable
中的JSON对象创建的每个哈希中。在循环中,我不是要删除每个哈希的内容,而只用新的键/值对替换它,我有一种感觉,我可能会这样做。
感谢任何帮助。
答案 0 :(得分:1)
由于您没有提供足够的信息,我们只能猜测,但很可能story
是一个数组,而不是哈希值。
答案 1 :(得分:1)
这将返回一个哈希数组,其中每个哈希都有键标题,类别和upvotes。
require 'rest-client'
require 'json'
def get_from_mashable
res = JSON.load(RestClient.get('http://mashable.com/stories.json'))
res["hot"].map do |story|
s = {title: story["title"], category: story["channel"], upvotes: get_upvotes(story["channel"]) }
end
end
def get_upvotes(category)
case category
when "Tech"
10
when "Business"
5
else
3
end
end
get_from_mashable()