Lua = оператор как печать - PullRequest
       24

Lua = оператор как печать

5 голосов
/ 27 сентября 2008

В Lua использование оператора = без l-значения, по-видимому, эквивалентно print (r-значению), вот несколько примеров, выполняемых в автономном интерпретаторе 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' */

Ответы [ 4 ]

15 голосов
/ 27 сентября 2008

Цитирование справочной страницы :

В интерактивном режиме ... Если строка начинается с '=', то lua отображает значения всех выражений в оставшейся части строки. Выражения должны быть разделены запятыми.

3 голосов
/ 27 сентября 2008

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

1 голос
/ 27 сентября 2008

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

0 голосов
/ 27 сентября 2008

Назначение не является выражением, которое возвращает что-то в Lua, как в C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...