2013-12-06 3 views
4

Если вы проверить некоторые luadocs, вы можете увидеть:C API и Lua типы

Есть восемь основных типов в Lua: ноль, логическое, число, строка, пользовательские данные, функция, нить, и таблица ,

Какой цели затем сделать функции API C, такие как lua_pushunsigned() и lua_pushinteger() Serve, так как тип lua числа обычно определяются как некоторый тип с плавающей точкой (например, double)? Почему бы не просто lua_pushnumber()?

ответ

4

Реализация для lua_pushinteger и lua_pushnumber идентична, за исключением проверки значений NaN для сигнализации в pushnumber. Целое число, переданное в pushinteger, приводится к lua_Number (который является double by default), прежде чем нажимать его на стек Lua.

Главное преимущество дополнительной абстракции здесь в том, что точная реализация преобразования типов обрабатывается Lua, а не пользователем. Например, вы заметите, что кастинг, сделанный для pushunsigned, немного сложнее, чем ожидалось по соображениям производительности. Однако, если вы предпочитаете делать кастинг самостоятельно (и вы знаете типы lua_Number и lua_Integer заранее), нет никакого вреда в просто вызове толкателя повсюду.

Обратите внимание, что предстоящий Lua 5.3 запланирован на introduce an integer number type, поэтому разница между функциями API, вероятно, станет более актуальной. Однако пока еще слишком рано прогнозировать окончательное влияние этого изменения на API.

Смежные вопросы