ทับทิมน่าเสียดายที่แตกต่างกันเล็กน้อย PS: ความทรงจำของฉันค่อนข้างขุ่นมัวในเรื่องนี้ดังนั้นขอโทษถ้าฉันผิด
แทนที่จะหยุดพัก / ต่อมันมีเบรค / ต่อไปซึ่งมีพฤติกรรมเหมือนกันในแง่ของลูป
ลูป (เหมือนทุกอย่างอื่น) เป็นนิพจน์และ "คืน" สิ่งสุดท้ายที่พวกเขาทำ เวลาส่วนใหญ่การรับค่าส่งคืนจากลูปนั้นไม่มีจุดหมายดังนั้นทุกคนจะทำเช่นนี้
a = 5
while a < 10
a + 1
end
อย่างไรก็ตามคุณสามารถทำได้
a = 5
b = while a < 10
a + 1
end # b is now 10
อย่างไรก็ตามรหัสทับทิมจำนวนมาก 'เลียนแบบ' ลูปโดยใช้บล็อก ตัวอย่างที่ยอมรับได้คือ
10.times do |x|
puts x
end
เนื่องจากเป็นเรื่องปกติที่คนทั่วไปต้องการทำสิ่งต่าง ๆ ด้วยผลลัพธ์ของบล็อกนี่จึงเป็นจุดที่ยุ่งเหยิง break / next หมายถึงสิ่งต่าง ๆ ในบริบทของบล็อก
ตัวแบ่งจะกระโดดจากรหัสที่เรียกว่าบล็อก
ถัดไปจะข้ามรหัสที่เหลือในบล็อกและ 'ส่งคืน' สิ่งที่คุณระบุให้ผู้โทรของบล็อก สิ่งนี้ไม่สมเหตุสมผลหากไม่มีตัวอย่าง
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
ใช่แล้ว Ruby นั้นยอดเยี่ยม แต่มีบางมุมที่แย่มาก นี่เป็นครั้งที่สองที่แย่ที่สุดที่ฉันเคยเห็นในปีที่ผ่านมาของการใช้ :-)