我有一个变量:
my_arr
可以是nil
或数组。我想验证它是否包含至少一个元素。它可以通过以下方式实现:
my_arr && !my_arr.empty?
但我想写得更简单。我试过了:
!my_arr.empty?
但如果my_arr
为nil
则失败。有一个简单的方法吗?
答案 0 :(得分:2)
这样可行:
my_arr.to_a.empty?
由于:
nil.to_a #=> []
另一方面,数组实例只返回自身。
同样的"技巧"适用于其他课程:
nil.to_h.empty? #=> true
nil.to_s.empty? #=> true
nil.to_i.zero? #=> true
答案 1 :(得分:1)
如果您的数组可能包含any?
和nil
值,您可以使用安全访问运算符和false
方法:
my_arr&.any?
如果可以的话,你可以使用any?(&:to_s)
,它看起来既不是原生也不是原始解决方案。
一般来说,最好确保它总是一个数组,或者至少是具有相同鸭子类型支持的东西。