1
我在线查看如何构建搜索引擎的代码(下面的链接)。作为新手程序员,我很难解释循环的方式。Ruby:'next if'和'if'语句
的Ruby代码:
def crawl_web(urls, depth=2, page_limit = 100)
depth.times do
next_urls = []
urls.each do |url|
url_object = open_url(url)
next if url_object == nil # [1]
url = update_url_if_redirected(url, url_object)
parsed_url = parse_url(url_object)
next if parsed_url == nil
@already_visited[url]=true if @already_visited[url] == nil # [2]
return if @already_visited.size == page_limit # [3]
next_urls += (find_urls_on_page(parsed_url, url)[email protected]_visited.keys)
next_urls.uniq!
end
urls = next_urls
end
end
问题:
- 是否退出程序的块并返回到 'urls.each' 行的开头,如果url_object是零?
- 此代码是否显示为:“如果我们正在查看的网址已被访问,或者已访问的网址是否为零?”
- 这个问题取决于我的第二个问题。如果问题#2中的一个陈述是真实的......只有在网站大小与page_limit相同的情况下,我们才应该返回唯一的next_urls。
任何建议帮助!感谢迄今为止的阅读!
链接:http://www.skorks.com/2009/07/how-to-write-a-web-crawler-in-ruby/
感谢您的洞察力在第三个问题上,程序员为什么决定使用'return'?如果'@ already_visited'完成了这项工作......是否有必要返还任何东西? – andy4thehuynh
在这种情况下,@leggooo'return'只是简单地打破了整个方法(因此包括突破嵌套块)。就像在“好吧,工作完成了,让我们离开这里吧。”毕竟工作被保存了。 '@ already_visited'没有执行工作,它存储在那里('@ already_visited'是一个变量,由于它的作用域而超出了crawl_web的方法;它是一个实例变量) –
感谢您的澄清。由于块在它下面结束两行,是否需要使用'return'?我想了解这个约定是否可以添加到其他代码中。 – andy4thehuynh