2008-09-27 72 views
5

在Lua中,使用=操作符不具有1-值似乎是等效于一个打印(r值),这里是在Lua中独立的解释器运行的几个例子:的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' */ 

回答

15

引述man page

在交互模式...如果一行以“=”开始,然后LUA显示在该行的其余所有的表达式的值。表达式必须用逗号分隔。

3

我认为这必须是独立解释器的一项功能。我无法做任何我编译lua的东西。

1

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

+0

但为什么不在错误的语法barf? – 2008-09-27 08:52:53

0

赋值不是一个表达式,它返回Lua中的内容,就像它在C中那样。