Начало и конец? Я бы воспользовался:
foo = 1..2
foo.min # => 1
foo.max # => 2
Попытка использовать деструктурирование для диапазона - плохая идея. Представьте размеры массива, который может быть сгенерирован, затем выброшен, теряя время и память процессора. На самом деле это отличный способ для DOS вашего собственного кода, если ваш диапазон заканчивается Float::INFINITY
.
end
не то же самое, как max
: в 1 ... 10, end
10, но max
является 9
Это потому, что start_val ... end_val
эквивалентно start_val .. (end_val - 1)
:
start_value = 1
end_value = 2
foo = start_value...end_value
foo.end # => 2
foo.max # => 1
foo = start_value..(end_value - 1)
foo.end # => 1
foo.max # => 1
max
отражает реальность значений, фактически используемых Ruby, когда итерации по диапазону или тестирования для включения в диапазон.
По моему мнению, end
должен отражать фактическое максимальное значение, которое будет учитываться внутри диапазона, а не значение, используемое в конце определения диапазона, но я сомневаюсь, что это изменится, иначе это повлияет на существующие код.
...
более запутанный и приводит к увеличению проблем с обслуживанием, поэтому его использование не рекомендуется.
Вам нужно либо укажите, что вас беспокоит только двухточечные диапазоны, или уточните, хотите ли вы 'max' или' last', которые вы, кажется, используете взаимозаменяемость. –