2014-11-16 3 views
0

Я новичок в кодировании в рубине, и мне интересно, почему я получаю предупреждение при запуске кода ниже.предупреждение: уже инициализировано

Я проверил несколько ответов на подобные вопросы, но, похоже, не может заставить меня работать для меня.

Вы знаете, почему это происходит и как его исправить?

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

Вот предупреждение я получаю в терминале

test_Amazon.rb:9: warning: already initialized constant PAGE_URL 
test_Amazon.rb:9: warning: previous definition of PAGE_URL was here 

Вот код:

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 



for $i in (1..5) 

PAGE_URL = "http://www.amazon.com/Best-Sellers/zgbs/automotive/?pg=#$i" 
page = Nokogiri::HTML(open(PAGE_URL)) 

    page.css(".zg_itemWrapper").each do |item| 
     price = item.at_css(".zg_price .price").text 
     asin = item.at_css(".zg_title a")[:href].split("/")[5].chomp 
     product_name = item.at_css(".zg_title a")[:href].split("/")[3] 

     puts "#{asin} #{price} #{product_name}" 

    end 
end 

ответ

1

Прописные переменные фактически являются постоянными. Вы получаете это предупреждение, когда вы изменяете значение констант. Чтобы избежать этого предупреждения в вашем примере использовать локальную переменную вместо константы для хранения URL:

5.times do |i| 
    page_url = "http://www.amazon.com/Best-Sellers/zgbs/automotive/?pg=#{i+1}" 
    page = Nokogiri::HTML(open(page_url)) 

    page.css(".zg_itemWrapper").each do |item| 
    ... 
    end 
end 

Другой вещь, которую вы должны избегать глобальные variabels как $i. Существует почти никогда не причина иметь переменную, доступную во всем мире во всей вашей кодовой базе.

+0

Большое спасибо spickermann! Я смог избавиться от предупреждения, сделав page_url в нижнем регистре. Есть ли какая-либо польза для использования «.times» против «for in»? – Sylvain