【发布时间】:2012-01-09 04:42:38
【问题描述】:
场景是这样的:您有一些输入要使用几个可能的过程之一进行处理,具体取决于输入本身的某些质量。在您尝试将输入发送给每个人之前,您不会提前知道哪个会起作用。
假设您有一系列可能的 procs 可以尝试。您想要的是找到第一个不会引发错误的过程,并获得它的返回值,最好是一次性完成。如果没有找到 proc,则引发错误。
在 ruby 中你最好如何做到这一点?
到目前为止,我的答案看起来像下面两个之一,但我正在寻找一种更惯用的方式。还有一种将 nil 的返回值视为有效的方法——现在这两种方法都将 nil 视为错误状态。
(1)
ret = nil
array_of_procs.find do |p|
begin
ret = p[input]
rescue
next
end
end
raise ArgumentError unless ret
(2)
ret = array_of_procs.inject(nil) do |memo, p|
memo = p[input] rescue next
break memo
end
raise ArgumentError unless ret
【问题讨论】:
标签: ruby