Я хотел бы расширить объект Ruby Array, чтобы он возвращал Array.new, если он равен nil.
Мое решение:
Перезаписать []
и at
.
module NullSafeArray
def at(index)
value = super
return Array.new if value.nil?
value
end
def [](index)
value = super
return Array.new if value.nil?
value
end
end
Проблема:
Это работает:
assert_equal Array.new [].to_be_null_safe[3]
Но это не удастся:
a, b = [nil, 2].to_be_null_safe
assert_equal Array.new, a
Какой еще метод должен быть перезаписан для этого?
Обновление:
Ваш ответ должен пройти это:
a, b = [9].to_null_safe
assert a == 9
assert b == Array.new
Это может быть a, b, c, d =
. Вы не знаете, сколько там запятой.
Полагаю, вы знаете, какой метод перезаписать, глядя на исходный код Ruby, я пробовал, но найти его довольно сложно.