Цикл в Lua



мое задание-как сделать цикл for. Я понял это в терминах чисел, но не могу понять это в терминах имен. Я хотел бы создать цикл for, который запускает список имен. Ниже то, что у меня есть до сих пор:



names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end


Я пробовал некоторые другие вещи, но это просто не работает, терминал всегда просто списки 1, 2, 3... Что я делаю не так?

866   3  

3 ответов:

ваша проблема проста:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

этот код сначала объявляет глобальную переменную с именем names. Затем, вы начинаете цикл. Цикл for объявляет a местные переменная, которая просто называется names тоже; тот факт, что переменная ранее был определен с names совершенно не имеет значения. Любое использование names внутри цикла for будет ссылаться на местные, а не глобальный.

цикл for говорит, что внутренняя часть цикла будет вызываться с помощью names = 1, потом names = 2, и окончательно names = 3. Цикл for объявляет a счетчик это считается от первого числа до последнего, и он будет вызывать внутренний код один раз для каждого значения, которое он считает.

то, что вы на самом деле хотели было что-то вроде этого:

names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
  print (names[nameCount])
end

синтаксис [] - это способ доступа к членам таблицы Lua. Таблицы Lua отображают "ключи"на " значения". Ваш массив автоматически создает ключи целого числа типа, которые увеличиваются. Таким образом, ключ, связанный с "Joe" в таблице, равен 2 (индексы Lua всегда начинаются с 1).

поэтому вам нужен цикл for, который считает от 1 до 3, который вы получаете. Переменная count используется для доступа к элементу из таблицы.

однако это имеет недостаток. Что произойдет, если вы удалите один из элементов из списка?

names = {'John', 'Joe'}
for nameCount = 1, 3 do
  print (names[nameCount])
end

Итак, мы получаем John Joe nil, потому что попытка доступа к значениям из таблицы, которые не существуют приводит к nil. Чтобы предотвратить это, нам нужно считать от 1 до длина таблицы:

names = {'John', 'Joe'}
for nameCount = 1, #names do
  print (names[nameCount])
end

The # оператор длину. Он работает с таблицами и строками, возвращая длину любого из них. Теперь, независимо от того, насколько большой или маленький names получает, это всегда будет работать.

однако есть более удобный способ перебора массива элементов:

names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
  print (name)
end

ipairs - это стандартная функция Lua, которая выполняет итерацию по списку. Этот стиль for цикл, итератор для цикла, использует этот вид функции итератора. Элемент i значение-это индекс записи в массиве. Элемент name значение значение. Так что это в основном делает много ворчать работу для вас.

чтение онлайн (таблицы учебник) кажется, что таблицы ведут себя как массивы, поэтому вы ищете:

Способ 1

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

Способ 1 использует таблицу index/key , на столе names каждый элемент имеет ключ, начиная с 1, например:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John

так что вы просто сделать i идти от 1 до 3.

On Way2 вместо этого вы указываете, какую таблицу вы хотите запустить, и назначаете переменную для ее ключа и значения, например:

names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end

печатает следующее:

1   John
2   Joe
myKey   myValue
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end
  1. вы удаляете таблицу и заменяете ее на int
  2. вы не тянете значение из таблицы

попробуй:

names = {'John','Joe','Steve'}
for i = 1,3 do
    print(names[i])
end

Comments

    Ничего не найдено.