我知道它通常与 for i,v in pairs() do
循环(或ipairs
,甚至next
)相结合,但究竟是什么in
?< / p>
为了澄清,我知道如何使用它,我只是不知道它背后的逻辑,它是如何工作的/它返回的是什么?
答案 0 :(得分:9)
Lua的in
不是函数或变量。它是流控制语法的一部分。您无法替换它,您无法复制它,您甚至无法引用它。它更像是括号:一个句法结构,它对程序的解析方式有意义,但不能在程序中引用。
它没有&#34;返回&#34;任何东西。它没有&#34;逻辑。&#34;它更像是占位符或标点符号。
答案 1 :(得分:7)
它没有做任何事情。这是语法。它不是一个功能。它不是一个操作码。它不是一种语言功能。它纯粹是语法上的。
请参阅lparser.c
中的forlist
功能:
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
。