Lua中的"in"关键字有什么作用?

war*_*ing 4 lua loops for-loop

我知道它通常与for i,v in pairs() do循环(或者ipairs,甚至next)相结合但究竟是in什么?

只是为了澄清,我知道如何使用它,我只是不知道它背后的逻辑,它是如何工作/它返回什么?

Joh*_*nck 10

Lua in不是函数或变量.它是流控制语法的一部分.你不能替换它,你不能复制它,你甚至不能参考它.它更像是括号:一个句法结构,它对程序的解析方式有意义,但在程序中不能引用.

它不会"返回"任何东西.它没有"逻辑".它更像是占位符或标点符号.


Eta*_*ner 7

它没有做任何事情.这是语法.它不是一个功能.它不是操作码.它不是语言功能.它纯粹是语法上的.

请参阅以下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);
}
Run Code Online (Sandbox Code Playgroud)

创建控制变量.处理逗号列表中的局部变量.检查下一个标记是否TK_IN映射到luaX_tokens.