警告:已经初始化

时间:2014-11-16 01:55:52

标签: ruby warnings constants

我刚接触红宝石编码,我想知道为什么在运行下面的代码时会收到警告。

我检查了类似问题的几个答案,但似乎无法让它对我有用。

你知道为什么会发生这种情况以及如何解决这个问题吗?

非常感谢你!

这是我在终端中收到的警告

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 个答案:

答案 0 :(得分:2)

大写变量实际上是常量。更改常量的值时会收到此警告。要避免在示例中出现此警告,请使用局部变量而不是常量来存储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

你应该避免的另一件事是全局变量,如$i。几乎没有理由在整个代码库中拥有一个可全局访问的变量。