Я знаю, что это обычно сочетается с петлей (или ipairs
, или даже next
), но что такое in
?Что делает ключевое слово «in» в Lua?
Просто, чтобы уточнить, я знаю, как его использовать, я просто не знаю логики, как это работает/что он возвращает?
Я знаю, что это обычно сочетается с петлей (или ipairs
, или даже next
), но что такое in
?Что делает ключевое слово «in» в Lua?
Просто, чтобы уточнить, я знаю, как его использовать, я просто не знаю логики, как это работает/что он возвращает?
Lua's in
не является функцией или переменной. Это часть синтаксиса для управления потоком. Вы не можете его заменить, вы не можете его скопировать, вы даже не можете ссылаться на него. Это скорее похоже на круглые скобки: синтаксическая конструкция, которая имеет смысл для того, как анализируется программа, но которая не может быть упомянута внутри программы.
Это ничего не возвращает. У него нет «логики». Это больше похоже на местозаполнитель или пунктуацию.
Спасибо. Я могу принять через 4 мин. – warspyking
следует также упомянуть, что то же самое верно для 'do-end' – hjpotter92
Это не делает ничего. Это синтаксис. Это не функция. Это не код операции. Это не язык. Это чисто синтаксический.
Смотрите функцию forlist
в lparser.c
:
static void forlist (LexState *ls, TString *indexname) {
/* forlist -> NAME {,NAME} IN explist1 forbody */
FuncState *fs = ls->fs;
expdesc e;
int nvars = 0;
int line;
int base = fs->freereg;
/* create control variables */
new_localvarliteral(ls, "(for generator)", nvars++);
new_localvarliteral(ls, "(for state)", nvars++);
new_localvarliteral(ls, "(for control)", nvars++);
/* create declared variables */
new_localvar(ls, indexname, nvars++);
while (testnext(ls, ','))
new_localvar(ls, str_checkname(ls), nvars++);
checknext(ls, TK_IN);
line = ls->linenumber;
adjust_assign(ls, 3, explist1(ls, &e), &e);
luaK_checkstack(fs, 3); /* extra space to call generator */
forbody(ls, base, line, nvars - 3, 0);
}
Создание управляющих переменных. Обработать локальные переменные в списке запятой. Убедитесь, что следующий токен TK_IN
, который соответствует luaX_tokens
.
Синтаксис. http://www.lua.org/manual/5.1/manual.html#8 –
@Etan Извините, возможно, я не объяснил правильно. Я понимаю, как его использовать, я хочу знать, как это работает. – warspyking
Это не «работает». Он ничего не делает. Это синтаксис. –