2013-12-07 4 views
0

Я побежал этот кусок кода раньше:Bug я не могу определить

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, ожидающий конец ввода

Не могли бы вы дать мне указания относительно того, где может произойти ошибка/опечатка (вначале играли в нее какое-то время и хотели бы получить обратную связь от ne w набор глаз).

Большое вам спасибо!

Edit: поэтому я сделал изменения предложил, но я получил несколько сообщений об ошибках:

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 

Я попытаюсь исправить ошибку в 29, вызвав reverse на отсортированном массиве и сохранив это для переменной.

Линия 35 представляет собой конец заявление, и нет никакой линии 46.

Любые советы?

Спасибо!

2nd Редактировать: Вау! Я не могу поверить, что не понял, что я не закончил многие вещи. С этого момента я буду придерживаться окончательного синтаксиса do and.

Благодарим вас за то, что вы очень помогли мне ... очень цените это!

+2

Рубин говорит вам, что есть ошибка синтаксиса линии 36. Можете ли вы определить, какая линия линия 36? Я только подсчитал 32 строки в коде, который вы опубликовали. –

+0

Строка 36 - последний оператор конца. Я прокомментировал некоторые строки в документе, следовательно, 32 строки кода вместо 36. Спасибо, что помогли мне! – Uzzar

ответ

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 
+0

... большое спасибо за откровение ошибок. Это имело значение. Я думаю, что некоторое время я буду использовать инструкции do и end (по крайней мере, пока я не стану более опытным). – Uzzar

1

Ваш отступы перепутались начиная здесь:

XPath.match(data, "//country").map { |element| 
    inflation_hash[element.attributes["name"]] = element.attributes["inflation"].to_i} 
    nested_array = inflation_hash.to_a 

Последняя строка этого отрывка должна быть отступа на один уровень, поскольку блок вы прошли на «карте» было прекращено на второй строке правой скобкой ,

Попробуйте исправить это и все после него.

Кроме того, здесь приведены советы: всегда записывайте многострочные блоки с использованием 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 
+0

Большое вам спасибо! Сделаем изменения прямо сейчас и посмотрим, что произойдет! PS: Мне нравится ваш совет; мой инструктор также призывает нас сделать то же самое. Я избегал делать больше ввода, но теперь буду следовать за вами, ребята, советы (особенно, поскольку это поможет с ошибками такого рода). Еще раз спасибо :) – Uzzar

Смежные вопросы