Issue #12075 has been updated by Matthew Kerwin.


Nobuyoshi Nakada wrote:
> First, along this line, we'll need negative forms for all predicate methods.
> 
> And I think `nil.empty?` makes no sense.
> 
> Just an idea:
> 
> ```ruby
> module Kernel
>   def not(*a)
>     not a.empty? ? self : __send__(*a)
>   end
> end
> 
> ary = nil;   ary&.not(:empty?) #=> nil
> ary = [];    ary&.not(:empty?) #=> false
> ary = [nil]; ary&.not(:empty?) #=> true
> ```

I like this proposal. I definitely prefer the word 'not' over the symbol '!', because `ary&.!:empty?` has too much consecutive punctuation for my eyes.

Would there be value in extending it to accept a block?

```ruby
module Kernel
  def not(*a, &b)
    not a.empty? ? self : __send__(*a, &b)
    # or even:
    #not a.empty? ? (b ? yield self : self) : __send__(*a, &b)
  end
end

ary = [];  ary&.not(:any?){|x|x>0} #=> true
ary = [1]; ary&.not(:any?){|x|x>0} #=> false
```

----------------------------------------
Feature #12075: some container#nonempty?
https://bugs.ruby-lang.org/issues/12075#change-57154

* Author: Yui NARUSE
* Status: Assigned
* Priority: Normal
* Assignee: Yukihiro Matsumoto
----------------------------------------
I sometimes write following code.

```
ary = some_metho_returns_nil_or_empty_container() # nil or "" or [] or {}

if ary && !ary.empty?
  #  some code
end
```

But the condition `ary && !ary.empty?` is too long and complex.
Though Ruby 2.3 introduces `&.`, but this can”Ēt be written as `ary&.empty?`.

One idea is add `nonempty?` write as `ary&.nonempty?`.

akr: `nonempty?` is not good name because human is not good at handling 

This discussion matches following core classes:
* String
* Array
* Hash



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>