Вопрос

В 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)));
  }
}

редактировать 2:

Чтобы быть действительно полным, весь трюк с перемещением значений в стек заключается в функции "pushline":

if (firstline && b[0] == '=')  /* first line starts with `=' ? */
  lua_pushfstring(L, "return %s", b+1);  /* change it to `return' */
Это было полезно?

Решение

Цитируя справочная страница:

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

Другие советы

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

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

Присваивание - это не выражение, которое возвращает что-то в Lua как это есть в C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top