ฉันต้องเขียนลูปที่ทำสิ่งที่ชอบ:
if i (1..10)
  do thing 1
elsif i (11..20)
  do thing 2
elsif i (21..30)
  do thing 3
etc...
แต่จนถึงขณะนี้ได้ไปผิดเส้นทางในแง่ของไวยากรณ์
ฉันต้องเขียนลูปที่ทำสิ่งที่ชอบ:
if i (1..10)
  do thing 1
elsif i (11..20)
  do thing 2
elsif i (21..30)
  do thing 3
etc...
แต่จนถึงขณะนี้ได้ไปผิดเส้นทางในแง่ของไวยากรณ์
คำตอบ:
ถ้า i ระหว่าง? (1, 10) สิ่งที่ทำ 1 เอลซิฟ i. ระหว่าง? (11,20) สิ่งที่ทำ 2 ...
i.between?(1..10)จะไม่ทำงาน (ถ้าเป็น..) ฉันคิดว่าต้องมีเหตุผลสำหรับมัน
                    3.between?(1, 3) => true
                    ใช้ตัว===ดำเนินการ (หรือคำพ้องความหมายinclude?)
if (1..10) === i
iการเป็นอย่างอื่นที่ไม่ใช่ตัวเลข (ชอบnil)
                    if i === (1..10)จะไม่ได้ผล
                    (1..10000000000000000)  ไม่ใช่อาร์เรย์ (1..10000000000000000) === 5000000000000000กำลังทำการทดสอบ "ระหว่าง" ภายใต้ประทุน
                    ตามที่ @Baldu กล่าวให้ใช้ตัวดำเนินการ === หรือกรณีการใช้งาน / เมื่อใช้ภายใน ===:
case i
when 1..10
  # do thing 1
when 11..20
  # do thing 2
when 21..30
  # do thing 3
etc...
หากคุณยังต้องการใช้ช่วง ...
def foo(x)
 if (1..10).include?(x)
   puts "1 to 10"
 elsif (11..20).include?(x)
   puts "11 to 20"
 end
end
โดยปกติคุณจะได้รับประสิทธิภาพที่ดีขึ้นมากด้วยสิ่งต่างๆเช่น:
if i >= 21
  # do thing 3
elsif i >= 11
  # do thing 2
elsif i >= 1
  # do thing 1
คุณสามารถใช้
if (1..10).cover? i then thing_1
elsif (11..20).cover? i then thing_2
และตามเกณฑ์มาตรฐานนี้ในFast Rubyนั้นเร็วกว่าinclude?
ไม่ใช่คำตอบโดยตรงสำหรับคำถาม แต่ถ้าคุณต้องการตรงข้ามกับ "within":
(2..5).exclude?(7)
จริง
คำตอบแบบไดนามิกมากขึ้นซึ่งสามารถสร้างได้ใน Ruby:
def select_f_from(collection, point) 
  collection.each do |cutoff, f|
    if point <= cutoff
      return f
    end
  end
  return nil
end
def foo(x)
  collection = [ [ 0, nil ],
                 [ 10, lambda { puts "doing thing 1"} ],
                 [ 20, lambda { puts "doing thing 2"} ],
                 [ 30, lambda { puts "doing thing 3"} ],
                 [ 40, nil ] ]
  f = select_f_from(collection, x)
  f.call if f
end
ดังนั้นในกรณีนี้ "ช่วง" จึงเป็นเพียงการล้อมรั้วด้วย nils เพื่อที่จะจับเงื่อนไขขอบเขต
สำหรับสตริง:
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
# => จริง
DateและDateTimeวัตถุในขณะที่===ไม่