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

我知道通常与 for i,v in pairs() do 循环(或 ipairs、甚至 next)组合使用,但in是什么意思呢?

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

点赞
用户4323
用户4323

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

它并不“返回”任何东西,也没有“逻辑”。它更像是一个占位符或标点符号。

2015-02-04 02:56:26
用户258523
用户258523

它并不做任何事情。它是语法。它不是函数。它不是操作码。它不是语言特性。它纯粹是语法。

看一下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);
}

创建控制变量。 处理逗号列表中的本地变量。 检查下一个token是TK_IN,它映射到luaX_tokens

2015-02-04 02:59:32