Lua = 将操作符作为 print

在Lua中,使用没有左值的=运算符似乎相当于print (右值)。 这里是在Lua独立解释器中运行的几个示例:

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

等等...

我的问题是:我在哪里可以找到关于=运算符的详细描述?它的工作原理是什么?是通过暗示特殊的默认左值吗? 我猜我的问题的根源是我不知道在Google中输入什么来查找相关信息:-)

编辑

谢谢回答,你们是对的,这是解释器的一个特性。 很愚蠢的问题,因为出现了我完全忽视了的明显问题。 在上午的咖啡之前,我应该避免发布 :-) 为了完整起见,这是解释器中处理此问题的代码:

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' */

原文链接 https://stackoverflow.com/questions/143234

点赞
stackoverflow用户17774
stackoverflow用户17774

我认为这可能是独立解释器的一个特性。在我编译成lua的任何东西上都无法运行。

2008-09-27 08:44:02
stackoverflow用户18179
stackoverflow用户18179

我不认为这是一个特性 - 直译器只会返回语句的结果。这是它的工作,对吧?

2008-09-27 08:48:45
stackoverflow用户17774
stackoverflow用户17774

Lua 中,Assignment 不像在 C 中一样返回一个表达式。

2008-09-27 08:58:13
stackoverflow用户15069
stackoverflow用户15069

引用man page的话:

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

2008-09-27 09:09:05