我确实意识到我可以做到
unless [1].empty?
但是我想知道是否有方法?
除了#any?
提到的 davidrac,ActiveSupport还有#present?这更像是其他语言的真实性测试。对于nil
, false
, ''
, {}
,[]
等等,它返回 false;其他一切都是真的(有趣的是,包括 0)。
您可以使用[1].any?
, 它实际上是在Enumerable中定义的
nil
请注意,如果您的数组仅包含或false
值,这将不起作用。
[nil].any?
=> false
[nil].any? {|something| true}
=> true
[].any? {|something| true}
=> false
[false, false].any? {|something| true}
=> true
[nil, 'g'].any? {|something| true}
=> true
我所知道的任何一种方法都无法在 Ruby 中为您提供这一点。关键词“单身”:
[5].size.positive? => true
[5].size.nonzero? => 1
[].size.positive? => false
[].size.nonzero? => nil
这两个对于安全导航操作符都更有用,因为 nil 返回 falsy,这意味着否定方法(如 #empty?)会有点崩溃:
# nil considered 'not empty' isn't usually what you want
not_empty = proc{|obj| !obj&.empty? }
not_empty.call nil => true
not_empty.call [ ] => false
not_empty.call [5] => true
# gives different 3 answers for the 3 cases
# gives truthy/falsy values you'd probably expect
positive_size = proc{|obj| obj&.size&.positive? }
positive_size.call nil => nil
positive_size.call [ ] => false
positive_size.call [5] => true
# gives truthy/falsy values you'd probably expect
nonzero_size = proc{|obj| obj&.size&.nonzero? }
nonzero_size.call nil => nil
nonzero_size.call [ ] => nil
nonzero_size.call [5] => 1
检查数组中的元素:
.empty?
。展示?
如果 a={}
a.any? 。零?
会给你假的。
要检查字段是否具有非零值:
.present?
.nil?
.any?