Как вы написали свой each_safe
метод, самым простым будет
curse_array.each_safe { |element| do_something_with(element) }
Редактировать: О, ваш метод each_safe тоже не правильный. Это должно быть «каждый делает», а не «каждый.до»
Редактировать 2: Если вы действительно хотите иметь возможность делать такие вещи, как "each_safe.map
", и в то же время иметь возможность делать "each_safe { ... }
", вы можете написать свой метод как это:
require 'enumerator'
class CurseArray < Array
BLACKLIST = /bad/
def each_safe
arr = []
each do |element|
unless element =~ BLACKLIST
if block_given?
yield element
else
arr << element
end
end
end
unless block_given?
return Enumerator.new(arr)
end
end
end