在方法调用中使用 ruby 块
下面的代码可以完美运行。
@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
知道如何让代码的第二个版本正常工作吗?
The following code works perfectly.
@doc = open(link) { |f| Hpricot(f) }
But I want to use the following code, which doesn't seem to play well with the Hpricot block (e.g. @doc is a TempFile object, not a Hpricot document object)
@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
Any idea how I can get the second version of the code to work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您正在使用块调用
resolve_link
,但没有将该块向下传递给open
。试试这个:You're calling
resolve_link
with a block but you're not passing that block down toopen
. Try this instead:您必须使用
yield
来调用该块。请参阅此答案以获得一个非常简单的示例:
Ruby 中的块和收益
所以类似的事情
应该有效。
You have to use
yield
to invoke the block.See this answer for a very simple example:
Blocks and yields in Ruby
So something along the lines
Should work.