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
哎呀。编辑以修复(/删除问题)。哎哟。已编辑以修复(/删除问题)。