有没有更好的方法从Ruby中的块中获取值?

时间:2014-10-22 20:08:56

标签: ruby block optional

我一直在使用if yield self[x]来评估一个块是返回true还是false。 我需要使块可选,我看到了yield if block_given?的建议。 我怎样才能将这两行结合起来?

3 个答案:

答案 0 :(得分:7)

你试过这个吗?

if block_given? && yield(self[x])
  # ...
end

当没有给出阻止时,这种情况总是会失败,即无法代替# ...进行评估。如果您希望条件成功,如果没有给出阻止,请改为:

if !block_given? || yield(self[x])
  # ...
end

或者这个,虽然我认为它更难阅读:

unless block_given? && !yield(self[x])
  # ...
end

答案 1 :(得分:3)

尝试:

if block_given?
   if yield self[x]
      # Do something....
   end
end

答案 2 :(得分:0)

您可以将条件附加到整个if块:

if yield self[x]
  # do something...
end if block_given?