Корпус и диапазоны в Ruby

В этой статье мы собираемся изучить следующие темы:

  • Оператор ..
  • Оператор
  • Диапазоны и плавающие значения

Не стесняйтесь читать статью Case statement behind the scene, если вы не знакомы с утверждением case и предложением when.

Прежде чем начать

Позвольте мне представить здесь платформу, которая помогла мне изучить большую часть моих знаний о Ruby. Действительно, Pluralsight - потрясающая платформа.

С 50+ курсами, которые охватывают различные темы по Ruby и Ruby on Rails, это лучший способ поднять свои знания на новый уровень!

Попробуйте бесплатно 👇😉



Спасибо за уделенное время!

Предложение when с диапазоном

В операторе case предложения when могут принимать диапазон в качестве параметра

Здесь оператор case принимает в качестве параметра целое число.

Поскольку предложение when принимает диапазон в качестве параметра, вызывается оператор Range#===, который проверяет, включено ли целое число в диапазон.

Оператор .. в нашем диапазоне обеспечивает включение левого и правого операндов в диапазон.

Второе предложение when принимает диапазон с помощью оператора .

Это означает, что правый операнд не включен в диапазон.

Теперь, когда мы более знакомы с предложением when и диапазонами, давайте разберемся с крайним случаем, с которым я столкнулся, используя числа с плавающей запятой и диапазоны.

Диапазон плавающих значений и предложение when

Как мы видели в приведенном выше примере, оператор исключает правый операнд диапазона. Но что, если я хочу исключить левый операнд?

Здесь обрабатывается только содержимое первого предложения when, которое соответствует значению surface - в нашем случае when 70..90 then :second_value.

В этом случае инструкция case возвращает :second_value.

Таким образом, следующее предложение when никогда не оценивается для surface равного 90.

Это отлично работает для целого ряда.

Но что, если нам придется иметь дело с целым рядом поплавков?

Здесь оператор case return :third_value, поскольку surface строго больше, чем 130.0.

если мы переназначаем surface = 130.0, то наш case оператор возвращает :second_value - то же самое, что и диапазоны целых чисел.

Обратите внимание, что мы используем константу Float::INFINITY для завершения нашего последнего диапазона.

Это эквивалентно любому значению выше 130.0.

Наконец, давайте посмотрим на понятие бесконечных диапазонов - это понятие было введено в Ruby 2.6.0.

В строке 6 в диапазоне явно отсутствует правый операнд.

Ruby интерпретирует это так: 130..Float::INFINITY

Это позволяет нам избежать неявного вызова Float::INFINITY для завершения нашего диапазона.

Итак, здесь значение surface совпадает с этим сравнением, а оператор case возвращает :third_value.

Вуаля!

Спасибо, что нашли время прочитать этот пост :-)

Не стесняйтесь 👏 и поделитесь этой статьей, если она была для вас полезна. 🚀

Кроме того, я публикую кучу статей в месяц.

Так что не стесняйтесь подписываться на меня, чтобы получать уведомление, когда я публикую статью.

Вот ссылка на мою последнюю статью: How environment check works in Ruby on Rails?