Senin sorunun basit:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
Bu kod ilk olarak adlı global bir değişkeni bildirir names
. Ardından, bir for döngüsü başlatırsınız. For döngüsü , sadece çağrılacak olan yerel bir değişken bildirir names
; bir değişkenin daha önce ile tanımlanmış names
olması tamamen konu dışıdır. names
For döngüsünün herhangi bir kullanımı , global olana değil yerel olana atıfta bulunacaktır .
For döngüsü, döngünün iç kısmının names = 1
, sonra names = 2
ve sonunda ile çağrılacağını söyler names = 3
. For döngüsü , ilk sayıdan sonuncuya kadar sayan bir sayaç bildirir ve saydığı her değer için iç kodu bir kez çağırır.
Aslında istediğin şey şuydu:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
[] Sözdizimi, bir Lua tablosunun üyelerine nasıl eriştiğinizdir. Lua tabloları "anahtarları" "değerler" ile eşler. Diziniz otomatik olarak artan tamsayı türünde anahtarlar oluşturur. Yani tablodaki "Joe" ile ilişkili anahtar 2'dir (Lua endeksleri her zaman 1'den başlar).
Bu nedenle, aldığınız 1'den 3'e kadar sayılan bir for döngüsüne ihtiyacınız var. Öğeye tablodan erişmek için count değişkenini kullanırsınız.
Ancak bunun bir kusuru var. Listedeki öğelerden birini kaldırırsanız ne olur?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Şimdi anlıyoruz John Joe nil
, çünkü var olmayan bir tablodan değerlere erişmeye çalışmak sonuçlanır nil
. Bunu önlemek için 1'den tablonun uzunluğuna kadar saymamız gerekir:
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
#
Uzunluk operatördür. Tablolar ve dizeler üzerinde çalışır, ikisinin uzunluğunu döndürür. Şimdi, ne kadar büyük veya küçük olursa olsun names
, bu her zaman işe yarayacaktır.
Ancak, bir dizi öğeyi yinelemenin daha uygun bir yolu vardır:
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairs
bir liste üzerinde yinelenen bir Lua standart işlevidir. Bu for
döngü stili, döngü için yineleyici, bu tür yineleme işlevini kullanır. i
Değeri dizisinin girişin endeksidir. name
O dizinde değer değerdir. Yani temelde sizin için çok fazla iş yapıyor.