我刚接触红宝石编码,我想知道为什么在运行下面的代码时会收到警告。
我检查了类似问题的几个答案,但似乎无法让它对我有用。
你知道为什么会发生这种情况以及如何解决这个问题吗?
非常感谢你!
这是我在终端中收到的警告
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
答案 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
。几乎没有理由在整个代码库中拥有一个可全局访问的变量。