summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-enum-ext
diff options
context:
space:
mode:
authorksss <[email protected]>2016-11-25 22:20:33 +0900
committerksss <[email protected]>2016-11-25 22:20:33 +0900
commitc28a963bf426afb00f2ebb32c0dff65dd3ff4b3f (patch)
tree18b639720fd18f333916ce84287aa8208377e45d /mrbgems/mruby-enum-ext
parent743c1e7be190eca83a08b95b0f6045cbdc9ba625 (diff)
downloadmruby-c28a963bf426afb00f2ebb32c0dff65dd3ff4b3f.tar.gz
mruby-c28a963bf426afb00f2ebb32c0dff65dd3ff4b3f.zip
Like a Enumerable#take
Diffstat (limited to 'mrbgems/mruby-enum-ext')
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb15
1 files changed, 9 insertions, 6 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb
index 5b50aba00..54db189f4 100644
--- a/mrbgems/mruby-enum-ext/mrblib/enum.rb
+++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb
@@ -222,14 +222,17 @@ module Enumerable
end
return nil
else
- a = []
- i = 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
end
end