Perulangan For
Ada dua bentuk perulangan for, seperti di Lua. Satu numerik dan satu generik:
for i = 10, 20 print i
for k = 1, 15, 2 -- an optional step provided print k
for key, value in pairs object print key, valuefor i = 10, 20 print i
for k = 1, 15, 2 -- an optional step provided print k
for key, value in pairs object print key, valueOperator slicing dan * dapat digunakan, seperti pada comprehension:
for item in *items[2, 4] print itemfor item in *items[2, 4] print itemSintaks yang lebih singkat juga tersedia untuk semua variasi ketika badan hanya satu baris:
for item in *items do print item
for j = 1, 10, 3 do print jfor item in *items do print item
for j = 1, 10, 3 do print jPerulangan for juga bisa digunakan sebagai ekspresi. Pernyataan terakhir di badan for dipaksa menjadi ekspresi dan ditambahkan ke tabel array yang terakumulasi.
Menggandakan setiap bilangan genap:
doubled_evens = for i = 1, 20 if i % 2 == 0 i * 2 else idoubled_evens = for i = 1, 20 if i % 2 == 0 i * 2 else iSelain itu, loop for mendukung break dengan nilai kembalian, sehingga loop itu sendiri bisa dipakai sebagai ekspresi yang keluar lebih awal dengan hasil bermakna. Ekspresi for mendukung break dengan banyak nilai.
Contohnya, untuk menemukan angka pertama yang lebih besar dari 10:
first_large = for n in *numbers break n if n > 10first_large = for n in *numbers break n if n > 10Sintaks break-dengan-nilai ini memungkinkan pola pencarian atau keluar-lebih-awal yang ringkas langsung di dalam ekspresi loop.
key, score = for k, v in pairs data break k, v * 10 if k == "target"key, score = for k, v in pairs data break k, v * 10 if k == "target"Anda juga bisa memfilter nilai dengan menggabungkan ekspresi for dengan pernyataan continue.
Loop for di akhir badan fungsi tidak diakumulasikan menjadi tabel untuk nilai kembalian (sebaliknya fungsi akan mengembalikan nil). Gunakan pernyataan return eksplisit, atau ubah loop menjadi list comprehension.
func_a = -> for i = 1, 10 do print ifunc_b = -> return for i = 1, 10 do i
print func_a! -- prints nilprint func_b! -- prints table objectfunc_a = -> for i = 1, 10 do print ifunc_b = -> return for i = 1, 10 do i
print func_a! -- prints nilprint func_b! -- prints table object