Issue #12059 has been updated by Nobuyoshi Nakada.


`[1, false, nil].one?` also returns `true`.

From `ri Enumerable#one?`:

------------------------------------------------------------------------------
  enum.one? [{ |obj| block }]   -> true or false

------------------------------------------------------------------------------

Passes each element of the collection to the given block. The method returns
true if the block returns true exactly once. If the block is not given, one?
will return true only if exactly one of the collection members is true.

  %w{ant bear cat}.one? { |word| word.length == 4 }  #=> true
  %w{ant bear cat}.one? { |word| word.length > 4 }   #=> false
  %w{ant bear cat}.one? { |word| word.length < 4 }   #=> false
  [ nil, true, 99 ].one?                             #=> false
  [ nil, true, false ].one?                          #=> true


----------------------------------------
Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059#change-56940

* Author: Tsuyoshi Sawada
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
There are some use cases when one wants to check if an array or a hash has exactly one element. I propose `Array#single?` and `Hash#single?` that checks for such cases and returns either `true` or `false`. This is an analogy from the `empty?` method on the respective class.

* When creating an inflectional form out of an array:

~~~ruby
a = ["object1", "object2"]
"There #{a.single ? "is" : "are"} #{a.length} #{a.single? ? "object" : "objects"}."
# => "There are 2 objects."
~~~

* When checking if all elements of the array are the same:

~~~ruby
[1, 2, 2, 1].uniq.single? # => false
[1, 1, 1, 1].uniq.single? # => true
~~~




-- 
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>