我之前运行了这段代码:
require "awesome_print"
require "rexml/document"
require "debugger"
include REXML
class Scrapper
attr_reader :data
def initialize
file = File.new("./cia-1996.xml")
@data = REXML::Document.new(file)
end
def get_country_inflation
inflation_hash = {}
XPath.match( data, "//country").map { |element|
inflation_hash[element.attributes["name"]] = element.attributes["inflation"].to_i}
nested_array = inflation_hash.to_a
sorted_array = nested_array.sort_by {|country, inflation_value| inflation_value}.reverse
puts "The countries with the highest inflation indexes in 1996 were:"
first_five = sorted_array.first(5)
first_five.each do |item|
puts "#{item[0]}, with an inflation index of #{item[1]}"
end
end
end
end
sample = Scrapper.new
sample.get_country_inflation
进行一些编辑后,我现在收到错误消息
economics_challenge.rb:36:语法错误,意外的keyword_end,期待输入结束
你能否指点一下错误/错字的位置(现在已经主演了一段时间,并会欣赏新眼睛的反馈)。
非常感谢你!
编辑: 所以我提出了更改建议但是我收到了更多错误消息:
economics_challenge.rb:26: syntax error, unexpected tSTRING_DEND, expecting keyword_end
economics_challenge.rb:29: syntax error, unexpected tSTRING_DEND, expecting '}'
...flation_value| inflation_value}.reverse
... ^
economics_challenge.rb:35: syntax error, unexpected keyword_end, expecting '}'
economics_challenge.rb:46: syntax error, unexpected end-of-input, expecting '}'
第26行是指下面代码段中的第2行:代码段(我认为这是原始问题所在的位置):
XPath.match( data, "//country").map do |element|
inflation_hash[element.attributes["name"]] = element.attributes["inflation"].to_i}
end
第29行是:
sorted_array = nested_array.sort_by {|country, inflation_value| inflation_value}.reverse
我将尝试通过在排序数组上调用reverse并将其保存到变量来修复29中的错误。
第35行是结束语句,没有第46行。
任何提示?
谢谢!
第二编辑:
哇!我无法相信我没有意识到我没有结束很多事情。从现在开始,我将坚持使用do and
结束语法。
非常感谢你们帮我这么多......真的很感激!
答案 0 :(得分:2)
问题是您还有一个end
正如@david-grayson所述,如果你的缩进是正确的,你可能已经发现了它。
这当然是给出了你在这里提出的代码。虽然错误消息与找到的问题匹配,但可能并非如此。
以下是包含缩进,某些样式更改以及没有语法错误的代码:
require 'awesome_print'
require 'rexml/document'
require 'debugger'
include REXML
class Scrapper
attr_reader :data
def initialize
file = File.new('./cia-1996.xml')
@data = REXML::Document.new(file)
end
def get_country_inflation
inflation_hash = {}
XPath.match(data, '//country').map do |element|
inflation_hash[element.attributes['name']] = element.attributes['inflation'].to_i
end
nested_array = inflation_hash.to_a
sorted_array = nested_array.sort_by do |country, inflation_value|
inflation_value
end.reverse
puts 'The countries with the highest inflation indexes in 1996 were:'
first_five = sorted_array.first(5)
first_five.each do |item|
puts "#{item[0]}, with an inflation index of #{item[1]}"
end
end
end
sample = Scrapper.new
sample.get_country_inflation
答案 1 :(得分:1)
你的缩进从这里开始搞砸了:
XPath.match( data, "//country").map { |element|
inflation_hash[element.attributes["name"]] = element.attributes["inflation"].to_i}
nested_array = inflation_hash.to_a
该摘录的最后一行应该缩进一个级别,因为传递给“map”的块在第二行被右括号终止。
尝试修复它及其后的所有内容。
此外,还有一个提示:始终使用do
和end
编写多行块,并将end
放在自己的行上。然后你可能会:
XPath.match( data, "//country").map do |element|
inflation_hash[element.attributes["name"]] = element.attributes["inflation"].to_i
end
nested_array = inflation_hash.to_a