
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 scenearticle if you’re not familiar with thecasestatement and thewhenclause.
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à!
.