Masalah Anda sederhana:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
Kode ini pertama-tama mendeklarasikan variabel global yang dipanggil names
. Kemudian, Anda memulai pengulangan for. Perulangan for mendeklarasikan variabel lokal yang kebetulan dipanggil names
juga; fakta bahwa variabel sebelumnya telah didefinisikan dengan names
sama sekali tidak relevan. Setiap penggunaan names
di dalam for loop akan merujuk ke penggunaan lokal , bukan global.
Perulangan for mengatakan bahwa bagian dalam dari perulangan akan dipanggil dengan names = 1
, kemudian names = 2
, dan akhirnya names = 3
. Perulangan for mendeklarasikan penghitung yang menghitung dari angka pertama hingga terakhir, dan akan memanggil kode dalam satu kali untuk setiap nilai yang dihitung.
Apa yang sebenarnya Anda inginkan adalah sesuatu seperti ini:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Sintaks [] adalah bagaimana Anda mengakses anggota tabel Lua. Tabel Lua memetakan "kunci" ke "nilai". Array Anda secara otomatis membuat kunci tipe integer, yang meningkat. Jadi kunci yang terkait dengan "Joe" dalam tabel adalah 2 (indeks Lua selalu dimulai dari 1).
Oleh karena itu, Anda memerlukan loop for yang menghitung dari 1 hingga 3, yang Anda dapatkan. Anda menggunakan variabel count untuk mengakses elemen dari tabel.
Namun, ini memiliki kekurangan. Apa yang terjadi jika Anda menghapus salah satu elemen dari daftar?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Sekarang, kita mengerti John Joe nil
, karena mencoba mengakses nilai dari tabel yang tidak ada hasilnya nil
. Untuk mencegahnya, kita perlu menghitung dari 1 sampai panjang meja:
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
Ini #
adalah operator panjang. Ini berfungsi pada tabel dan string, mengembalikan panjang keduanya. Sekarang, tidak peduli seberapa besar atau kecilnya names
, ini akan selalu berhasil.
Namun, ada cara yang lebih mudah untuk melakukan iterasi melalui berbagai item:
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairs
adalah fungsi standar Lua yang melakukan iterasi pada daftar. Gaya for
pengulangan ini, pengulangan untuk pengulangan, menggunakan jenis fungsi iterator. The i
nilai adalah indeks entri dalam array. The name
nilai adalah nilai pada indeks itu. Jadi pada dasarnya itu melakukan banyak pekerjaan kasar untuk Anda.