Вопрос
В 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
.