Ruby:'next if'和'if'语句

时间:2013-04-01 02:22:12

标签: ruby url loops syntax

我正在网上查看有关如何构建搜索引擎的代码(链接如下)。作为一名新手程序员,我无法解释循环的方式。

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)-@already_visited.keys)
      next_urls.uniq!
    end
    urls = next_urls
  end
end

问题:

  1. 程序是否退出该块并返回到' urls.each'的开头。如果url_object是零,那么行?
  2. 此代码是否为:"如果我们正在查看的网址已被访问过,或者已访问过的网址是否为零?"
  3. 这个问题取决于我的第二个问题。如果问题#2中的一个陈述是真的......只有当站点大小与page_limit相同时,我们才应该返回唯一的next_urls。
  4. 任何建议都有帮助!感谢您的阅读!

    链接: http://www.skorks.com/2009/07/how-to-write-a-web-crawler-in-ruby/

1 个答案:

答案 0 :(得分:1)

  1. 的确
  2. 如下所示:如果我们之前没有访问此网址,则将@already_visited[url]设置为true
  3. 是的,仅当@already_visited“列表”与页面限制大小相同时才返回。它实际上并没有返回任何东西,大多数工作似乎是在实例变量@already_visited上完成的,因此不需要返回任何内容。