From c28a963bf426afb00f2ebb32c0dff65dd3ff4b3f Mon Sep 17 00:00:00 2001 From: ksss Date: Fri, 25 Nov 2016 22:20:33 +0900 Subject: [PATCH 1/2] Like a Enumerable#take --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 5b50aba004..54db189f4a 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -222,14 +222,17 @@ def first(n=NONE) 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 From 1bf565ea0447f69d8ffcca756b82fa789f6afca0 Mon Sep 17 00:00:00 2001 From: ksss Date: Fri, 25 Nov 2016 22:25:48 +0900 Subject: [PATCH 2/2] Argument more strictly --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 54db189f4a..113b470a99 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -215,13 +215,15 @@ def sort_by(&block) # Returns the first element, or the first +n+ elements, of the enumerable. # If the enumerable is empty, the first form returns nil, 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 + 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 @@ -233,6 +235,8 @@ def first(n=NONE) break if i == 0 end ary + else + raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)" end end