如何解决在方法调用中使用红宝石块
| 以下代码可以完美运行。@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
知道如何使第二版代码起作用吗?
解决方法
您正在用一个块调用
resolve_link
,但没有将该块传递给open
。尝试以下方法:
def resolve_link(link,&block)
begin
return open(link,&block)
#...
, 您必须使用ѭ5来调用该块。
请参阅以下答案以获取一个非常简单的示例:
Ruby中的块和收益
所以事情总是如此
def resolve_link(link)
...
yield ( some_value_to_pass_to_the_block )
...
end
应该管用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。