Lua = 运算符作为打印

Posted

技术标签:

【中文标题】Lua = 运算符作为打印【英文标题】:Lua = operator as print 【发布时间】:2010-09-13 16:21:41 【问题描述】:

在 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)));
  

edit2

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

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

【问题讨论】:

【参考方案1】:

引用man page:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

我不会将其称为功能 - 解释器只是返回语句的结果。这是他的工作,不是吗?

【讨论】:

难道不应该在 "a = 8" 上也打印 8 吗?我知道许多脚本控制台都这样做(python、irb、perl -d -e 0 等),但我只是尝试过 LUA 不会打印所有语句的值,只是“= ...”。 jkramer:12 年后,抱歉耽搁了。这是因为 Lua 不是将赋值视为表达式的语言之一(python 等就是这样做的)。因此,它没有返回值,因此被评估为nil。这样 Lua 就可以准确地确定 a = b = 3 是否是词法错误,而无需跟踪换行符(因为 a = <CR> b = 3 可能是语法错误)。 PUC Rio 只是决定省略一些灵活性,以防止不太喜欢代码的人自责(因为 Lua 是为非编码人员创建的)。【参考方案4】:

Assignment 不是在 Lua 中返回某些内容的表达式,就像在 C 中一样。

【讨论】:

以上是关于Lua = 运算符作为打印的主要内容,如果未能解决你的问题,请参考以下文章

还请教一下,在LUA语言中如何计算加减法运算?

Lua 运算符

Lua运算符

为啥 Lua 的长度 (#) 运算符会返回意外的值?

lua 运算符

Lua中..和#运算符的用法