In dit artikel gaan we de volgende onderwerpen uitdiepen:
De .. operator
De … operator
Ranges en zwevende waarden
Voel je vrij om de
Lees gerust het Case statement behind the scene-artikel als u niet bekend bent met het case statement en de when-clausule.
Voordat je begint
Ik ben verheugd om ons nieuwste project met jullie te delen: Leuke weetjes over Ruby – Deel 1
Voel je vrij om het woord te verspreiden en deel deze post! 🙏
Dank u voor uw tijd!
In een case statement kunnen de when clausules een bereik als parameter nemen
Hier, neemt het case-instructie een geheel getal als parameter.
Als de when-clausule een bereik als parameter neemt, wordt de Range#===-operator aangeroepen en wordt gecontroleerd of het gehele getal binnen het bereik valt.
De .. operator in ons bereik zorgt ervoor dat de linker en de rechter operand in het bereik zijn opgenomen.
De tweede when clausule neemt een bereik met behulp van de … operator.
Dit betekent dat de rechter operand niet in het bereik is opgenomen.
Nu we beter bekend zijn met de when-clausule en bereiken, laten we eens kijken naar een randgeval dat ik tegenkwam bij het gebruik van variabelen en bereiken.
Bereik van drijvende waarden en de wanneer-clausule
Zoals we in het bovenstaande voorbeeld hebben gezien, sluit de … operator het rechter operand van het bereik uit. Maar wat als ik de linker operand wil uitsluiten?
Hier, wordt alleen de inhoud van de eerste when-clausule verwerkt die overeenkomt met de surface-waarde – in ons geval when 70..90 then :second_value.
In dit geval levert het case statement :second_value op.
Dus de volgende when clausule wordt nooit geëvalueerd voor een surface of 90.
Dit werkt prima voor een bereik van gehele getallen.
Maar wat als we te maken hebben met een bereik van vlotters?
Hier, het case statement retourneert :third_value omdat surface strikt groter is dan 130.0.
als we surface = 130.0 opnieuw toewijzen, dan geeft ons case statement :second_value terug – hetzelfde als reeksen gehele getallen.
Merk op dat we de constante Float::INFINITY gebruiken om ons laatste bereik te beëindigen.
Dit is equivalent aan elke waarde boven 130.0.
Laten we tot slot eens kijken naar het begrip eindeloze bereiken – Dit begrip is geïntroduceerd in Ruby 2.6.0.
Dit is equivalent aan elke waarde boven 130.0.
Laten we tot slot eens kijken naar het begrip eindeloze bereiken – Dit begrip is geïntroduceerd in Ruby 2.6.0.6.0.
Op regel 6 laat de range expliciet de rechter operand weg.
Ruby interpreteert dit als volgt: 130..Float::INFINITY
Dit stelt ons in staat om te voorkomen dat we impliciet de Float::INFINITY moeten aanroepen om ons bereik te beëindigen.
Dus hier, de waarde van surface komt overeen met deze vergelijking en het case statement retourneert :third_value.