summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-11-26 09:59:50 +0900
committerGitHub <[email protected]>2016-11-26 09:59:50 +0900
commit4256130ecd48f65491b487539e5a799fd02d4027 (patch)
treed9abbd1ad84f87feb53dce11b90a9a622e33e540
parentf66635069495cfefaa58a99833969e7982c6976d (diff)
parent1bf565ea0447f69d8ffcca756b82fa789f6afca0 (diff)
downloadmruby-4256130ecd48f65491b487539e5a799fd02d4027.tar.gz
mruby-4256130ecd48f65491b487539e5a799fd02d4027.zip
Merge pull request #3293 from ksss/enum-first
Fix incompatibility for Enumerable#first
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb25
1 files changed, 16 insertions, 9 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb
index 5b50aba00..113b470a9 100644
--- a/mrbgems/mruby-enum-ext/mrblib/enum.rb
+++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb
@@ -215,21 +215,28 @@ module Enumerable
# Returns the first element, or the first +n+ elements, of the enumerable.
# If the enumerable is empty, the first form returns <code>nil</code>, and the
# second form returns an empty array.
- def first(n=NONE)
- if n == NONE
+ def first(*args)
+ case args.length
+ when 0
self.each do |*val|
return val.__svalue
end
return nil
- else
- a = []
- i = 0
+ when 1
+ n = args[0]
+ raise TypeError, "no implicit conversion of #{n.class} into Integer" unless n.respond_to?(:to_int)
+ i = n.to_int
+ raise ArgumentError, "attempt to take negative size" if i < 0
+ ary = []
+ return ary if i == 0
self.each do |*val|
- break if n<=i
- a.push val.__svalue
- i += 1
+ ary << val.__svalue
+ i -= 1
+ break if i == 0
end
- a
+ ary
+ else
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)"
end
end