loops - language - lua for loop break
Para Loop en Lua (3)
Mi tarea es cómo hacer un ciclo for. Lo he descubierto en términos de números, pero no puedo entenderlo en términos de nombres. Me gustaría crear un ciclo for que se ejecute en una lista de nombres. Lo siguiente es lo que tengo hasta ahora:
names = {''John'', ''Joe'', ''Steve''}
for names = 1, 3 do
print (names)
end
He intentado algunas otras cosas, pero simplemente no funciona, la terminal siempre enumera 1, 2, 3 ... ¿Qué estoy haciendo mal?
Al leer en línea ( tutorial de tablas ), parece que las tablas se comportan como matrices, por lo que estás buscando:
Way1
names = {''John'', ''Joe'', ''Steve''}
for i = 1,3 do print( names[i] ) end
Way2
names = {''John'', ''Joe'', ''Steve''}
for k,v in pairs(names) do print(v) end
Way1 usa el index/key
de la tabla, en los names
su tabla names
cada elemento tiene una clave que comienza en 1, por ejemplo:
names = {''John'', ''Joe'', ''Steve''}
print( names[1] ) -- prints John
Entonces haces que vaya de 1 a 3.
En Way2, en su lugar, especifica qué tabla desea ejecutar y asigna una variable para su clave y valor, por ejemplo:
names = {''John'', ''Joe'', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end
imprime lo siguiente:
1 John
2 Joe
myKey myValue
Tu problema es simple:
names = {''John'', ''Joe'', ''Steve''}
for names = 1, 3 do
print (names)
end
Este código primero declara una variable global llamada names
. Entonces, comienzas un ciclo for. El ciclo for declara una variable local que simplemente se llama también names
; el hecho de que una variable haya sido definida previamente con names
es completamente irrelevante. Cualquier uso de names
dentro del bucle for se referirá al local , no al global.
El bucle for dice que se llamará a la parte interna del bucle con names = 1
, luego names = 2
y finalmente names = 3
. El ciclo for declara un contador que cuenta desde el primer número hasta el último, y llamará al código interno una vez por cada valor que cuente.
Lo que realmente querías era algo como esto:
names = {''John'', ''Joe'', ''Steve''}
for nameCount = 1, 3 do
print (names[nameCount])
end
La sintaxis [] es la forma de acceder a los miembros de una tabla Lua. Las tablas Lua asignan "claves" a "valores". Su matriz crea automáticamente claves de tipo entero, que aumentan. Entonces, la clave asociada con "Joe" en la tabla es 2 (los índices de Lua siempre comienzan en 1).
Por lo tanto, necesitas un bucle for que cuente de 1 a 3, lo que obtienes. Usas la variable de conteo para acceder al elemento de la tabla.
Sin embargo, esto tiene un defecto. ¿Qué sucede si elimina uno de los elementos de la lista?
names = {''John'', ''Joe''}
for nameCount = 1, 3 do
print (names[nameCount])
end
Ahora, obtenemos a John Joe nil
, porque intentar acceder a los valores de una tabla que no existe da como resultado nil
. Para evitar esto, necesitamos contar de 1 a la longitud de la tabla:
names = {''John'', ''Joe''}
for nameCount = 1, #names do
print (names[nameCount])
end
El #
es el operador de longitud. Funciona en tablas y cadenas, devolviendo la longitud de cualquiera. Ahora, no importa cuán grandes o pequeños sean los names
, esto siempre funcionará.
Sin embargo, hay una manera más conveniente de iterar a través de una matriz de elementos:
names = {''John'', ''Joe'', ''Steve''}
for i, name in ipairs(names) do
print (name)
end
ipairs
es una función estándar Lua que itera sobre una lista. Este estilo de bucle for
, iterator for loop, usa este tipo de función de iterador. El valor i
es el índice de la entrada en la matriz. El valor del name
es el valor en ese índice. Por lo tanto, básicamente hace mucho trabajo para usted.
names = {''John'', ''Joe'', ''Steve''}
for names = 1, 3 do
print (names)
end
- Estás eliminando tu tabla y reemplazándola con una int
- No está sacando un valor de la tabla
Tratar:
names = {''John'',''Joe'',''Steve''}
for i = 1,3 do
print(names[i])
end