Ich muss eine Schleife schreiben, die ungefähr so funktioniert:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Aber bisher sind wir in Bezug auf die Syntax die falschen Wege gegangen.
ruby
integer
conditional
range
Übrigens
quelle
quelle
Date
undDateTime
Objekte, während===
dies nicht der Fall ist.i.between?(1..10)
wird nicht funktionieren (wenn es so ist..
) Ich nehme an, es muss einen Grund dafür geben3.between?(1, 3) => true
Verwenden Sie den
===
Operator (oder sein Synonyminclude?
)quelle
i
, etwas anderes als eine Zahl (wienil
) zu seinif i === (1..10)
nicht funktionieren(1..10000000000000000)
ist kein Array.(1..10000000000000000) === 5000000000000000
macht gerade einen "Zwischen" -Test unter der HaubeVerwenden Sie, wie @Baldu sagte, den Operator === oder den Anwendungsfall / when, der intern === verwendet:
quelle
wenn Sie noch Bereiche verwenden wollten ...
quelle
Normalerweise erzielen Sie eine viel bessere Leistung mit:
quelle
Du könntest benutzen
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
und nach diesem Benchmark in Fast Ruby ist schneller als
include?
quelle
Keine direkte Antwort auf die Frage, aber wenn Sie das Gegenteil von "innerhalb" wollen:
quelle
exclude?
ein Rails-Zusatz ist .Eine dynamischere Antwort, die in Ruby erstellt werden kann:
In diesem Fall sind die "Bereiche" also wirklich nur mit Nullen eingezäunt, um die Randbedingungen zu erfassen.
quelle
Für Streicher:
# => wahr
quelle