以下代码完美无缺。
@doc = open(link) { |f| Hpricot(f) }
但是我想使用下面的代码,它似乎与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
知道如何让代码的第二个版本工作吗?
答案 0 :(得分:5)
您正在使用某个块调用resolve_link
但是您没有将该块传递给open
。试试这个:
def resolve_link(link, &block)
begin
return open(link, &block)
#...
答案 1 :(得分:1)
您必须使用yield
来调用阻止。
有一个非常简单的例子,请参阅这个答案:
这样的话
def resolve_link(link)
...
yield ( some_value_to_pass_to_the_block )
...
end
应该工作。