Ruby 我应该如何重构它?
我想收集所有这些信息并将其存储到一个数组中 我有以下几点,我应该如何重构它Ruby 我应该如何重构它?,ruby,refactoring,nokogiri,Ruby,Refactoring,Nokogiri,我想收集所有这些信息并将其存储到一个数组中 我有以下几点,我应该如何重构它 require 'rubygems' require 'nokogiri' require 'open-uri' @urls = %w{http://url_01.com http://url_02.com http://url_03.com} @link_01_arr = [] @link_02_arr = [] @link_03_arr = [] link_01 = Nokogiri::HTML(open("#
require 'rubygems'
require 'nokogiri'
require 'open-uri'
@urls = %w{http://url_01.com http://url_02.com http://url_03.com}
@link_01_arr = []
@link_02_arr = []
@link_03_arr = []
link_01 = Nokogiri::HTML(open("#{@urls[0]}"))
@link_01_arr[0] = link_01.at("title").inner_html
@link_01_arr[1] = link_01.at(".content").inner_html
@link_01_arr[2] = link_01.at(".date").inner_html
我试着这样做,但结果慢了很多。我想是因为这样会有更多的要求
@urls = %w{http://url_01.com http://url_02.com http://url_03.com}
@titles_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at("title").inner_html
end
@content_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at(".content").inner_html
end
@date_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at(".date").inner_html
end
@titles\u arr=[]
@内容_arr=[]
@日期_arr=[]
@url.each do | url|
curr=Nokogiri::HTML(打开(url))
@titles\u arr@titles\u arr=[]
@内容_arr=[]
@日期_arr=[]
@url.each do | url|
curr=Nokogiri::HTML(打开(url))
@在不知道如何使用数据的情况下,很难知道如何重构代码。但是,我将使用具有意义的键(作为符号)的哈希,而不是数组。这大大提高了使用数据时的可读性。这里有一个建议:
urls = %w{http://url_01.com http://url_02.com http://url_03.com}
data = urls.collect do |url|
document = Nokogiri::HTML(open(url))
{ :title => document.at("title").inner_html,
:content => document.at(".content").inner_html,
:date => document.at(".date").inner_html }
end
# Accessing the data:
data[0] #=> { :title => "...", :content => "...", :date => "..." }
data[0][:title] #=> Returns title of first URL
data[1][:date] #=> Returns date of second URL
在不知道如何使用数据的情况下,很难知道如何重构代码。但是,我将使用具有意义的键(作为符号)的哈希,而不是数组。这大大提高了使用数据时的可读性。这里有一个建议:
urls = %w{http://url_01.com http://url_02.com http://url_03.com}
data = urls.collect do |url|
document = Nokogiri::HTML(open(url))
{ :title => document.at("title").inner_html,
:content => document.at(".content").inner_html,
:date => document.at(".date").inner_html }
end
# Accessing the data:
data[0] #=> { :title => "...", :content => "...", :date => "..." }
data[0][:title] #=> Returns title of first URL
data[1][:date] #=> Returns date of second URL
哎呀。编辑以修复(/删除问题)。哎哟。已编辑以修复(/删除问题)。