#ruby #arrays
#ruby #массивы
Вопрос:
У меня есть массив date_array
. Если i
есть 0
, я бы хотел date_array[i-1]
вернуть nil
или исключение. Я думал, что смогу создать подкласс Array для этого, но я не уверен, куда идти после этого. Есть идеи?
Ответ №1:
Вы могли бы это сделать, но вам это не нужно. Я чувствую, что вы поступаете неправильно, поскольку ответственность за проверку передаваемого значения индекса лежит на вас, а не на массиве.
Просто пример
def get_array_value (i)
return data_array[i - 1] unless i < 0
return nil
end
Однако, если вы настаиваете, это решение может сработать для вас.
# arr = SpecialArray.new([1, 2, 3, 4, 5])
class SpecialArray < Array
def [](i)
return super(i) unless i < 0
return nil
end
end
Комментарии:
1. да, изменение прямого вызова массива через [] на функцию (как у вас выше) работает так же хорошо. Спасибо.
Ответ №2:
Что ж, я согласен с Адамом, было бы идеально контролировать индексы вместо этого:
class Ary < Array
def [](i)
return nil if i < 0
super
end
end
a = Ary.new([1, 2, 3])
b = Array.new([1, 2, 3])
#try access with -1 (normally would show last)
p a[-1] #=> nil
p b[-1] #=> 3
Ответ №3:
Я думаю, что вы, возможно, что-то делаете неправильно. При этом:
Вы могли бы использовать хэш вместо массива. Хэши не будут повторно интерпретироваться hash[-1]
, чтобы означать что-то другое.