diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-24 00:08:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-24 00:08:01 +0900 |
| commit | 2a771760bed104433f7b95732595bfa7573fb9fa (patch) | |
| tree | f3dcd7df41e44858946cbe23123c832032570035 /mrbgems/mruby-enum-ext/mrblib/enum.rb | |
| parent | e2bab8c71be55def3a9c9e7f3a234c43cd2bea2f (diff) | |
| parent | 919ca8f42beb9d010afb35a0c715bee043d31ac3 (diff) | |
| download | mruby-2a771760bed104433f7b95732595bfa7573fb9fa.tar.gz mruby-2a771760bed104433f7b95732595bfa7573fb9fa.zip | |
Merge pull request #1926 from suzukaze/add-enum.one
Add Enumerable#one?
Diffstat (limited to 'mrbgems/mruby-enum-ext/mrblib/enum.rb')
| -rw-r--r-- | mrbgems/mruby-enum-ext/mrblib/enum.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index a228abb0b..4f5166b03 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -439,4 +439,33 @@ module Enumerable end true end + + ## + # call-seq: + # enum.one? [{ |obj| block }] -> true or false + # + # Passes each element of the collection to the given block. The method + # returns <code>true</code> if the block returns <code>true</code> + # exactly once. If the block is not given, <code>one?</code> will return + # <code>true</code> 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 + # + + def one?(&block) + count = 0 + self.each do |*val| + if block + count += 1 if block.call(*val) + else + count += 1 if val.__svalue + end + end + count == 1 ? true : false + end end |
