Я пытаюсь создать методы для Enumerable#each
и Enumerable#map
, называемые my_each
и my_map
.
Но возникает проблема, когда я пытаюсь уступить блоку из my_each
в my_map
карте, кто-нибудь может мне помочь?
Когда я заменяю my_each
внутри my_map
на просто each
, он работает
module Enumerable
def my_each
return self.to_enum :my_each unless block_given?
for i in 0..self.length - 1
yield(self[i])
end
return self
end
def my_map(proc=nil)
return_array = Array.new
return self.to_enum :my_map if !block_given? && proc.nil?
self.my_each do |i|
return_array.push(proc.call(i)) unless proc.nil?
return_array.push(yield(i)) if block_given? && proc.nil?
end
return_array
end
end
array = [1, 2, 3, 4, 5]
puts '*** my_each ***'
array.my_each do |num|
puts num * num
end
puts '*** my_map ***'
puts "#{((1..4).my_map { |i| i * i })} "
puts "#{(1..4).my_map.to_a} "
puts "#{([1, 2, 3, 4].my_map { |i| i * i })} "
puts "#{[1, 2, 3, 4].my_map.to_a}\n\n\n"
он должен работать как обычноmap
метод, но он бросает мне это:
undefined method `length' for 1..4:Range