Opcje i zakresy w Ruby

Mehdi Farsi

Follow

Jul 22, 2019 – 3 min read

W tym artykule zamierzamy zbadać następujące tematy:

  • Operator ..
  • Operator …
  • Zakresy i wartości zmiennoprzecinkowe

Zapraszamy do lektury. free to read the Case statement behind the scene article if you’re not familiar with the case statement and the when clause.

Przed rozpoczęciem

Jestem zachwycony, że mogę podzielić się z Wami naszym najnowszym projektem: Fun Facts about Ruby – Volume 1

Zapraszam do rozpowszechniania informacji i dzielenia się tym wpisem! 🙏

Dziękuję za Twój czas!

W instrukcji case klauzule when mogą przyjmować zakres jako parametr

Tutaj, instrukcja case przyjmuje jako parametr liczbę całkowitą.

Jako, że klauzula when przyjmuje zakres jako parametr to wywoływany jest operator Range#===, który sprawdza czy liczba całkowita jest zawarta w zakresie.

Operator .. w naszym zakresie zapewnia, że lewy i prawy operand są zawarte w zakresie.

Druga klauzula when przyjmuje zakres używając operatora ….

To oznacza, że prawy operand nie jest zawarty w zakresie.

Teraz, gdy jesteśmy bardziej zaznajomieni z klauzulą when i zakresami, rozbijmy przypadek brzegowy, który napotkałem używając zmiennych i zakresów.

Zakres wartości zmiennych i klauzula when

Jak widzieliśmy w powyższym przykładzie, operator … wyklucza prawy operand zakresu. Ale co, jeśli chcę wykluczyć lewy operand?

Tutaj, przetwarzana jest tylko zawartość pierwszej klauzuli when, która pasuje do wartości surface – w naszym przypadku when 70..90 then :second_value.

W tym przypadku instrukcja case zwraca :second_value.

Tak więc następna klauzula when nigdy nie jest oceniana dla surface z 90.

To działa dobrze dla zakresu liczb całkowitych.

Ale co, jeśli mamy do czynienia z zakresem pływaków?

Tutaj, instrukcja case zwraca :third_value ponieważ surface jest ściśle większy niż 130.0.

Jeśli ponownie przypiszemy surface = 130.0 to nasza instrukcja case zwraca :second_value – tak samo jak zakresy liczb całkowitych.

Zauważmy, że używamy stałej Float::INFINITY aby zakończyć nasz ostatni zakres.

Jest to równoważne każdej wartości powyżej 130.0.

Na koniec przyjrzyjmy się pojęciu nieskończonych zakresów – Pojęcie to zostało wprowadzone w Ruby 2.6.0.

W linii 6 zakres jawnie pomija prawy operand.

Ruby interpretuje to następująco: 130..Float::INFINITY

To pozwala nam uniknąć niejawnego wywołania Float::INFINITY w celu zakończenia naszego zakresu.

Więc tutaj, wartość surface pasuje do tego porównania, a instrukcja case zwraca :third_value.

Voilà!

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *