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

7

我一直在使用if yield self[x]来判断一个块是否返回true或false。 我需要使该块是可选的,并且我看到建议采用yield if block_given?的方式。 如何将这两行代码合并?


1
为什么不展示你想要做的事情,而不是描述它呢?这样我们就可以修复你的代码,而不是让你试图硬塞一些东西进去。 - the Tin Man
3个回答

7

你试过这个吗?

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

当没有给出块时,这个条件将总是失败的,也就是说,无论在# ...的位置放什么都不会被评估。如果你希望在没有给出块的情况下条件成功,请改用以下方法:
if !block_given? || yield(self[x])
  # ...
end

或者这样,尽管我认为它更难读:
unless block_given? && !yield(self[x])
  # ...
end

3

尝试:

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

0

您可以在整个if块后附加一个条件:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接