5

在 Lua 中,使用不带左值的 = 运算符似乎等同于 print(r-value),以下是在 Lua 独立解释器中运行的一些示例:

> = a
nil
> a = 8
> = a
8
> = 'hello'
hello
> = print
function: 003657C8

等等...

我的问题是:在哪里可以找到 = 运算符的这种用法的详细说明?它是如何工作的?是通过暗示一个特殊的默认 l 值吗?我想我的问题的根源是我不知道在谷歌中输入什么来查找有关它的信息:-)

编辑

感谢您的回答,您是对的,这是解释器的一个功能。愚蠢的问题,因为我不知道我完全忽略了显而易见的原因。我应该避免在早上喝咖啡之前发帖 :-) 为了完整起见,这里是解释器中处理这个问题的代码:

while ((status = loadline(L)) != -1) {
  if (status == 0) status = docall(L, 0, 0);
  report(L, status);
  if (status == 0 && lua_gettop(L) > 0) {  /* any result to print? */
    lua_getglobal(L, "print");
    lua_insert(L, 1);
    if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0)
      l_message(progname, lua_pushfstring(L,
                           "error calling " LUA_QL("print") " (%s)",
                           lua_tostring(L, -1)));
  }
}

编辑2

真正完整的是,将值压入堆栈的整个技巧在于“pushline”函数:

if (firstline && b[0] == '=')  /* first line starts with `=' ? */
  lua_pushfstring(L, "return %s", b+1);  /* change it to `return' */
4

4 回答 4

15

引用手册页

在交互模式下... 如果一行以 '=' 开头,那么 lua 会在该行的其余部分显示所有表达式的值。表达式必须用逗号分隔。

于 2008-09-27T09:09:05.330 回答
3

我认为这一定是独立口译员的一个特点。我无法在我将 lua 编译成的任何东西上进行这项工作。

于 2008-09-27T08:44:02.677 回答
1

我不会把它称为一个特性——解释器只是返回语句的结果。这是他的工作,不是吗?

于 2008-09-27T08:48:45.257 回答
0

赋值不是返回 in 的表达式,就像 inLua一样C

于 2008-09-27T08:58:13.267 回答