Sayangnya Ruby agak berbeda. PS: Ingatan saya agak kabur tentang ini jadi minta maaf jika saya salah
bukannya break / continue, itu telah break / next, yang berperilaku sama dalam hal loop
Loop (seperti yang lainnya) adalah ekspresi, dan "mengembalikan" hal terakhir yang mereka lakukan. Sebagian besar waktu, mendapatkan nilai kembali dari loop tidak ada gunanya, jadi semua orang hanya melakukan ini
a = 5
while a < 10
a + 1
end
Namun Anda dapat melakukan ini
a = 5
b = while a < 10
a + 1
end # b is now 10
NAMUN, banyak kode ruby āā'mengemulasi' sebuah loop dengan menggunakan blok. Contoh kanonik adalah
10.times do |x|
puts x
end
Karena jauh lebih umum bagi orang-orang untuk ingin melakukan sesuatu dengan hasil dari blok, ini adalah tempat itu menjadi berantakan. break / next berarti hal-hal yang berbeda dalam konteks blok.
break akan keluar dari kode yang disebut blok
selanjutnya akan melewati sisa kode di blok, dan 'mengembalikan' apa yang Anda tentukan ke penelepon blok. Ini tidak masuk akal tanpa contoh.
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.
Jadi ya. Ruby luar biasa, tetapi memiliki beberapa kasus sudut yang mengerikan. Ini adalah yang terburuk kedua yang pernah saya lihat selama bertahun-tahun menggunakannya :-)