68

我确实意识到我可以做到

unless [1].empty? 

但是我想知道是否有方法?

4

5 回答 5

99

除了#any?提到的 davidrac,ActiveSupport还有#present?这更像是其他语言的真实性测试。对于nil, false, '', {},[]等等,它返回 false;其他一切都是真的(有趣的是,包括 0)。

于 2012-08-02T16:22:51.240 回答
23

您可以使用[1].any?, 它实际上是在Enumerable中定义的

nil请注意,如果您的数组仅包含或false值,这将不起作用。

于 2012-08-02T16:15:30.300 回答
9
[nil].any?
=> false
[nil].any? {|something| true}
=> true
[].any? {|something| true}
=> false
[false, false].any? {|something| true}
=> true
[nil, 'g'].any? {|something| true}
=> true
于 2014-12-31T04:38:10.290 回答
2

我所知道的任何一种方法都无法在 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
于 2019-12-04T06:21:20.437 回答
1

检查数组中的元素:
.empty?
。展示?

如果 a={}
a.any? 。零?
会给你假的。

要检查字段是否具有非零值:

.present?
.nil?
.any?
于 2013-05-23T16:14:12.540 回答