使用方法调用的ruby块

der*_*use 0 ruby hpricot block

以下代码完美无缺.

@doc = open(link) { |f| Hpricot(f) }
Run Code Online (Sandbox Code Playgroud)

但是我想使用下面的代码,它似乎与Hpricot块不匹配(例如@doc是一个TempFile对象,而不是Hpricot文档对象)

@doc = resolve_link(link) { |f| Hpricot(f) }

def resolve_link(link)
  begin
    return open(link)
  rescue
    logger.debug("#{$!} for link #{link}")
    raise Exceptions::ErrorResolvingLink.new("Cannot resolve link #{link}.")
  end
end
Run Code Online (Sandbox Code Playgroud)

知道如何让代码的第二个版本工作吗?

mu *_*ort 5

你正在resolve_link用一个块来调用,但是你没有将该块传递给open.试试这个:

def resolve_link(link, &block)
  begin
    return open(link, &block)
  #...
Run Code Online (Sandbox Code Playgroud)