Це дуже проста репрезентація функції class в інших мовах програмування.
Об'єкт Object
може бути змінений, як і його назва. Усі змінні, функції, списки прив'язані до нього автоматично додадуться до нового об'єкта.
Object = {} -- Будь-який початковий об'єкт класу
function Object:new(...) -- двокрапка викликає функцію Object.new(self, ...), де self введе те що знаходиться всередині Object
object = setmetatable({}, {__index = self}) -- створюється новий об'єкт, у який поміщається усе що було в self(__index являє собою посилання на основний об'єкт, якби надаючи йому усі властивності
-- основного об'єкта)
local Arguments = ... -- фіксування аргументів функції
for k, v in pairs(self) do -- цикл що пройдеться по усім значенням аргументів
if k ~= "Local" then -- та введе або значення аргументу, або, за його відсутності, значення self(усі окрім Local)
Вивід[k] = v or Вивід[k]
else
Local = setmetatable({}, {__index = v}) --Введе Local у окрему змінну
end
end
return object, Local -- вивід об'єкта і значень Local
end
Фунція працює так
local NewObject = Object:new(...)
після цього усі параметри Object змішаються з введеними параметрами у функцію.
local NewObject, local_arguments = Object:new(...) --Зробить новий об'єкт на основі Object, а також виведе локальні аргументи у local_arguments
--Або ж є такий варіант:
local NewObject, NewObject.Local = Object:new(...) --додасть таблицю Local до нового об'єкту
В прикладах використовуються класи заради створення ролі для копії популярної настільної гри Mafia, щоб не створювати окремо кожну роль з її функціями та параметрами, усе зроблено на основі Роль
Мафія = Роль:створити({Тип = "Mafia", Убивця = true, Колір = 1, Опис = "Killer of the town", Спілкується_вночі= true, Бік = "Bad"})
Тут навіть якщо ми не введемо якийсь параметр цей параметр залишиться з
Роль = {
Назва = "Heck",
Тип = ...,
Убивця = false,
Колір = "#fffff",
Опис = ...,
Спілкується_вночі = false,
Бік = "Good"
}
тут буде туторіал для використання Lua з C
Lua - мова програмування що написана повністю на C і не компілює файли, а запускає їх через сам lua.exe, це називається Runtime, також цей runtime можна симулювати в C за допомогою стандартних бібліотек Lua для C.
Lua - доволі проста скриптингова мова, яка не має типів і має доволі велике фокусування на Object Oriented Programming. Що є корисного в Lua? Lua має table і function, які можуть бути корисні будь-де, наприклад, table може замінити і struct і array і має моживості використання обох одразу, також ви можете створювати metatable, тобто table які будуть надавати властивості іншим, наприклад у вас є багато об'єктів в грі, ви хочете щоб усі об'єкти мали приблизно однакові властивості і однакову структуру, для цього ви можете створити metatable:
Object = {
параметри
}
NewObject = Object
або як в моєму прикладі:
Object = {}
NewObject = Object:new(параметри)
Функції можуть бути будь-якого вигляду, виводити багато об'єктів одразу і виводити об'єкти не одного типу, або ж виводити іншу функцію, яку можна викликати
також Lua має можливість прямого доступу до усіх зміних, тобто в луа, усі індекси зберігаються в _G
table і можуть бути змінені/введені як:
_G[Назва змінної] = значення
або
_G[назва нової змінної] = значення
також Lua надає розширенні можливості використання table за допомогою стандартних аргументів:
__add, __sub, __mul, __dev, __pow, __cat, __call, __index й інші
документацію з цих аргуметів можете знайти на офіційному сайті Lua
Для початку, завантажте Lua(для тестування) і бібліотеки Lua для C. Перейдіть на сайт (Lua)[lua.org], зайдіть в Download, під вкладкою Building оберіть download binaries, оберіть потрібну версію і оберіть tools executables для завантаження Lua. Далі оберіть платформу, завантажте .zip теку і розпакуйте її в якесь місце на вашому пристрої. Далі вам потрібно додати Lua до глобальних програм, тобто PATH, для кожної операційної системи цей процес відрізняється, тому рекомендую подивитись туторіал для саме вашої системи: (Як додати програму до PATH на Windows)[https://www.youtube.com/watch?v=gb9e3m98avk], (Як додати програму до PATH на Linux)[https://www.youtube.com/watch?v=AhJ0bFmF36w], (Як використати програму в PATH на MacOS)[https://www.youtube.com/watch?v=2J58Pc2ZOAQ]
Після цього ви можете використовувати Lua, тестувати програми.
Тепер давайте завантажимо бібліотеки Lua, перейдімо знову на сайт Lua, Download, під вкладкою Building оберіть download binaries, оберіть потрібну версію і оберіть Windows libraries, завантажте zip теку. Після цього можете переглянути туторіал на те, як ініціалізувати Lua в вашому проєкті:
або послідувати прикладу:
створіть нову папку, в ній створіть папку Lua, в неї перемістіть усі файли з завантаженої zip теки. Перемістіть lua54.dll з папки Lua в папку вашого проєкту. Після цього можете створити c і lua файли для роботи з ними і для того, щоб використати lua і скомпілювати C, використовуйте ось таку комадку компіляції:
gcc -Wall main.c -I "Lua/Include" -L "Lua" -llua54 -o main
де -Wall аргумент, що вмикає виведення помилок при запуску, виконуваний файл - main.c -I "шлях" це шлях до бібліотек, в даному випадку це лише Lua/Include, -L - шлях до бібліотек і файлів .lib/.a -llua54 файл .lib
Натисність на кнопку Code у правому верхньому кутку, потім натисніть Download ZIP file, розпакуйте, і можете використовувати код в Program/Classes.lua, або сам файл. Ви також можете використовувати LuaRocks:
luarocks install simple_classes_lua
It's simple representation of class function in other programming languages. Object "Object" can be changed, as his name. All variables, functions, tables inside Object will automatically be added to new object.
Object = {} -- Any beginning object for a class
function Object:new(...) -- function for making new class, semicolon passes Object.new(self, ...), where self is equal to caller of a function, in this example Object
object = setmetatable({}, {__index = self}) -- creates new object, which contains everything that was in self(__index is a sender to parent object, giving new object all it's parameters)
for k, v in pairs(...) do -- cycle that will check for all arguments
if k ~= "Local" then
object[k] = Arguments[k] or v -- passes all arguments to the new object
else
Local = setmetatable({}, {__index = v["Local"]}) -- passes all local arguments to a Local
end
end
return object, Local -- returns object and Local
end
Function works like this:
local NewObject = Object:new(...)
After that all Object parameters will be availible in NewObject
local NewObject, local_arguments = Object:new(...) --Will give all parameters to a New Object and pass all parameters maked as Local to a local_arguments
--Або ж є такий варіант:
local NewObject, NewObject.Local = Object:new(...) --will add Local to the NewObject
Examples The examples use classes to create a role for a clone of the popular board game Mafia, so as not to create a separate role skin with its features and options based on "Role"
To download go to GitHub repository and press on Code in right up corner, then press download ZIP file and unpack it, you can use Program/Classes.lua code or whole file You can also use LuaRocks:
luarocks install simple_classes_lua