gpt4 book ai didi

Ruby:如何写一个 "DRY"/动态/灵活的树状循环结构

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:53 25 4
gpt4 key购买 nike

我正在寻找在 Ruby 中完成以下结构/逻辑问题的最佳方法:

一个网站需要完全爬取,收集每个页面的标题。

但是:

  • 不知道网站的树状结构(有多少“层级”、“分支”等)
  • 代码应该是“DRY”(=“不要重复自己”)

以下(简化的)示例当然是完全愚蠢的:

url = some_root_url
@title_collection = Array.new

go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |url|
go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |url|
go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |url|
go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |url|
go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |url|
go_to_page(url)
@title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

[...]
end
end
end
end
end

那么您将如何以“DRY”方式灵活高效地实现这一目标?

非常感谢!

汤姆

最佳答案

递归是你的 friend :

def walk_tree(url)
go_to_page(url)
title_collection << find_all_titles_on_page
urls = find_all_urls_on_page

urls.each do |child_url|
title_collection << walk_tree(child_url)
end

title_collection
end

关于Ruby:如何写一个 "DRY"/动态/灵活的树状循环结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com