Введение в Lua


              

Получение данных из файла


Пока мы вводили весь код lua вручную. Здорово, если Вы хотите печатать ваш скрипт по несколько раз в консоли. Этот роман не продлится и более 5 секунд. Так, как насчет получения данных из файла? Хорошо, у нас есть два способа, но вопрос остается … как мы можем получить эти данные?

Это действительно очень просто, очень похоже на все, что мы пока видели в lua. Lua имеет функцию lua_dofile() и по существу обрабатывает содержимое файла. Ничего себе, это делает жизнь действительно интересной. И так, если бы я добавил эту возможность к текущему исходному коду, я мог бы заставить мое приложение выполнять скрипт всякий раз когда оно запущено. По существу:

#include <stdio.h> extern "C" { #include <lua.h> #include <lualib.h> }

int main(int argc, char* argv[ ]) { lua_State* luaVM = lua_open(0);

if (NULL == luaVM) { printf("Error Initializing lua\n"); return -1; }

// инициализация стандартных библиотечных функции lua

lua_baselibopen(luaVM); lua_iolibopen(luaVM); lua_strlibopen(luaVM); lua_mathlibopen(luaVM);

printf("Simple Functional lua interpreter\n"); printf("Based on lua version 4.0.1\n"); printf("Enter lua commands. type 'exit<enter>' to exit\n"); printf("\n>");

lua_dofile(luaVM, "./startup.lua");

lua_close(luaVM);

return 0; }

Двигаемся дальше … на что похож этот "startup.lua"? На следующее:

-- Примитивный lua скрипт -- Комментарий добавляется как '--' a = 5; b = 10; c = a + b; print ("5+10=" .. c);

Что же мы получим в результате? Смотрите ниже:

Как Вы можете заметить, это все достаточно просто. Но, если Вы присмотритесь, то увидите несколько проблем.

Прежде всего, весь наш исходный текст скрипта доступен для любого желающего. Возможно это не очень хорошо, так как по существу выставляет все функциональные возможности игры (то есть: игровую логику) на показ в доступном формате. Так, как исправлять эту оплошность? Мы скомпилируем наш скрипт.

Здесь самое время почесать затылок. "Эш", спрашиваете Вы, "есть ли возможность избежать необходимость компилировать что-либо"? Да, конечно.

Содержание  Назад  Вперед