2008-09-27 69 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中那樣。