0

「 Rubyのフィボナッチ数列(再帰)@subcategories_urls_array 」のようなこの人口をどのように書き換えますか。

再帰を停止する CSS セレクターがもうないかどうかを確認する条件を使用する必要があり'.group_title'ますか?それとも、サイクルをカウントするフラグ変数を使用して実行できますか?

def main
=begin
=end
  @job_section_url = find_job_section_url()
  write_header_to_file()
  @groups_urls_array = describe_groups(@job_section_url)
  @subcategories_urls_array = Array.new
  @groups_urls_array.each do |group_url|
    @subcategories_urls_array << describe_groups(group_url)
  end #each
  @subcategories_urls_array.flatten!

end #main

def describe_groups(job_section_url)
=begin
Parse a page into an array of groups URLs.
=end
  # @looking_for_a_job_string = '%D0%98%D1%89%D1%83+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83'
  @groups_urls_array = Array.new
  @page = open(job_section_url, 'Cookie' => 'city=3')
  @doc = Nokogiri::HTML(@page)
  @nodeset = @doc.css('.group_title')[0..-2]
  @nodeset.each do |a|
    @group_url = CGI.escape(a['href']).gsub('%2F', '/')
    @group_url = URI.join(DOMAIN_URL, @group_url).to_s
    @groups_urls_array << @group_url
  end #each

  @groups_urls_array
end #describe_groups

そして、これを実装するために本当に必要ですか?

4

1 に答える 1

1

私はそれを次のようにします:

def main

  @job_section_url = find_job_section_url()

  write_header_to_file()

  groups_urls_array = describe_groups(@job_section_url)

  subcategories_urls_array = []

  groups_urls_array.each do |group_url|
    subcategories_urls_array << describe_groups(group_url)
  end

  subcategories_urls_array.flatten

end 

# Parse a page into an array of groups URLs.
def describe_groups(job_section_url)

  # @looking_for_a_job_string = '%D0%98%D1%89%D1%83+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83'
  doc = Nokogiri::HTML(open(job_section_url, 'Cookie' => 'city=3'))

  doc.css('.group_title')[0..-2].map { |a|
    URI.join(
      DOMAIN_URL,
      CGI.escape(a['href']).gsub('%2F', '/')
    ).to_s
  } 

end 

注意事項は次のとおりです。

  • mainメソッド名の選択としては適切ではありません。これは C ではないので、説明的でニーモニックなものを使用してください。
  • =being/を使用して、メソッドの内部ではなく、メソッドの定義の前にコードにコメントを付けます=end。Rdoc は先頭のコメントを見つけて解析し、まともなドキュメントにします。Using#は Ruby の慣用句であり、=beginはサポートされていますが、ほとんど使用されておらず、実際にはこのような議論でのみ使用されることがほとんどです。
  • より多くの空白を使用します。これは無料で、アプリケーションの速度が低下することはなく、時間の経過とともに脳が読みやすくなります。
  • []空の配列を初期化するために使用し、同様に{}ハッシュにも使用します。それらは短く、ブロック形式が使用されている場合を除いて、Array.newまたはよりも頻繁に表示されます。Hash.new
  • subcategories_urls_array.flattenフラット化された配列を返します。サブ配列が存在しない場合flatten!に返されます。これはおそらくあなたが望むものではなく、バグである可能性が最も高いです。nil
  • describe_groups役に立たなかった中間変数を削除して、コードを DRY しました。
  • doc.css('.group_title')[0..-2].map配列を返すので、要素を配列にプッシュして返す必要がなくなります。これはメソッド内で行われる最後の処理であるため、Ruby は自動的に戻り値をメソッドの戻り値として使用します。
于 2013-11-06T04:53:44.133 に答える