在Rails中,我想检查数组是否为空(arr= [])。
!arr&.any?
arr&.empty?哪一个更正确?
发布于 2019-12-30 15:41:49
看看下面的Ruby:
[1, 2].any? => true
[nil, false].any? => false
[nil, nil].any? => false
[1, 2].empty? => false
[nil, nil].empty? => falseEnumerable#any?是一个询问“这个集合中是否有什么是真的?”的方法。在Ruby语言中,对象的存在被认为是真的;所以调用不带块的#any?就是在说这个集合中是否存在非空或非假的东西?
有关更多信息,请参阅"any? != ! empty?“
发布于 2019-12-30 15:56:45
在Ruby on Rails中,我会使用blank?。从文档中:
如果对象为false、空或空白字符串,则该对象为空。例如,nil、'‘、’‘、[]、{}和false都为空。
array = []
array.blank?
#=> true请注意,blank?只能在Ruby on Rails中工作,而不能在普通Ruby中工作,而且它的行为与empty?略有不同。请查看此comparision,了解您可能从不同方法中获得的响应或错误。
发布于 2019-12-30 15:59:57
如果您想检查arr是否不包含元素,那么arr.empty?是正确的。
如果您还想接受nil或false为空,那么!arr || arr.empty?是正确的。在Ruby on Rails中,您可以使用arr.blank?。
arr&.empty?做的与您想要的相反。如果希望nil的结果为true,则nil&.empty?为false。如果arr为nil,则安全导航运算符&.将返回nil。Rubocop将通过Lint/SafeNavigationWithEmpty捕捉到这一点。
https://stackoverflow.com/questions/59527277
复制相似问题