Rails中的.present?和.any?惯用法是什么?

8

是否有一种Rails/Ruby习惯用语,可以检查可枚举对象同时存在且具有非nil值?

如果我尝试执行nil.any?,就会出现错误,因此我总是需要执行if foo && foo.any?

3个回答

11

你可以使用ActiveSupport提供的try方法:

obj.try(:any?)

如果obj.nil?,则此代码将计算为nil;如果obj是空集合,则它将计算为false。因此,在布尔上下文中,它的值都为假。


只是一个提醒,这需要ActiveSupport(因为问题中提到的是“Rails / Ruby”,而不仅仅是Rails)。 - Andrew Marshall
@Andrew:是的,它是针对Rails特定的。 - Niklas B.

2
我相信你现在可以使用安全导航运算符:
if foo&.any?

仅仅为了阐述一下,安全导航操作符在 Ruby >= 2.3 版本中可用。 - Spone

0

你也可以使用 andand gem:

foo.andand.any?

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