Корпус и диапазоны в 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?