2008-09-27 3 views
5

В Lua, используя оператор = без L-значения, как представляется, эквивалентно печати (г-значение), вот несколько примеров запускаются в качестве интерпретатора Lua:Луа = оператор как печать

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

И так далее ...

Мой вопрос: где я могу найти подробное описание этого использования для оператора =? Как это работает? Это связано с особым значением l по умолчанию? Я предполагаю, что корень моей проблемы заключается в том, что я понятия не имею, что ввести в 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))); 
    } 
} 

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

Я думаю, что это должно быть особенностью автономного переводчика. Я не могу выполнить эту работу во всем, что я скомпилировал.

1

Я бы не назвал это функцией - интерпретатор просто возвращает результат инструкции. Это его работа, не так ли?

+0

, но почему он не говорит о неправильном синтаксисе? – 2008-09-27 08:52:53

0

Назначение - это не выражение, которое возвращает что-то в Lua, как будто оно находится в C.