Muszę napisać pętlę, która robi coś takiego:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Ale do tej pory poszli złymi ścieżkami pod względem składni.
ruby
integer
conditional
range
przy okazji
źródło
źródło
Date
i,DateTime
podczas gdy===
nie.i.between?(1..10)
nie zadziała (jeśli jest..
) Przypuszczam, że musi być ku temu powód3.between?(1, 3) => true
Użyj
===
operatora (lub jego synonimuinclude?
)źródło
i
kimś innym niż liczba (na przykładnil
)if i === (1..10)
nie zadziała(1..10000000000000000)
nie jest tablicą.(1..10000000000000000) === 5000000000000000
robi tylko test „pomiędzy” pod maskąJak powiedział @Baldu, użyj operatora === lub przypadku użycia / kiedy wewnętrznie używa ===:
źródło
jeśli nadal chcesz używać zakresów ...
źródło
Zwykle można uzyskać znacznie lepszą wydajność, stosując coś takiego:
źródło
Możesz użyć
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
i według tego testu w Fast Ruby jest szybszy niż
include?
źródło
Nie jest to bezpośrednia odpowiedź na pytanie, ale jeśli wolisz coś przeciwnego do „wewnątrz”:
źródło
exclude?
jest to dodatek do Railsów .Bardziej dynamiczna odpowiedź, którą można zbudować w Rubim:
Tak więc w tym przypadku „zakresy” są tak naprawdę ogrodzone zerami, aby uchwycić warunki brzegowe.
źródło
Na smyczki:
# => prawda
źródło