From 9e2faec8e4f5cb24ffc8a7f10284c05598b91acd Mon Sep 17 00:00:00 2001 From: ksss Date: Thu, 24 Nov 2016 10:34:14 +0900 Subject: Support object does'n have `<` method --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 6724dff37..bd64cc6bd 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -58,9 +58,8 @@ module Enumerable def take(n) raise TypeError, "no implicit conversion of #{n.class} into Integer" unless n.respond_to?(:to_int) - raise ArgumentError, "attempt to take negative size" if n < 0 - - n = n.to_int + i = n.to_int + raise ArgumentError, "attempt to take negative size" if i < 0 ary = [] self.each do |*val| break if ary.size >= n -- cgit v1.2.3 From 5134734541dd993f74a40b1621009add2cf110bf Mon Sep 17 00:00:00 2001 From: ksss Date: Thu, 24 Nov 2016 10:35:15 +0900 Subject: Shouldn't call `each` method if size is 0 --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index bd64cc6bd..5b50aba00 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -61,9 +61,11 @@ module Enumerable 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 ary.size >= n ary << val.__svalue + i -= 1 + break if i == 0 end ary end -- cgit v1.2.3