Roma
Да фиг с ним с наследованием, по вопросу оно и не нужно нам ) Смотри, что у нас есть:
- идея фикс протокола countable, со свойством count: Int
- три таблицы. не суть какие они и зачем, но у двух есть свойство "count", а в третьей его нет. причем первая и вторая в остальном вообще про разное.
- задача чтобы нельзя было вставить куда-то свойством эту таблицы если они не имеет свойства count (не поддерживают countable) и как-то это удобно описать на lua. Попытка вставить третью таблицу выставит nil.
- задача чтобы эти две таблицы с count лежали в массиве и была уверенность что они туда попали так как поддерживают countable. и вытаскивая их оттуда мы работали с таблицей которая только лишь с этим свойством, а осатльное где-то зашито внутрь.
Roma
Т.е. по факту нам видимо нужны:
- сеттеры которые делают проверку на наличие свойств и типов
- геттеры которые возвращают обертку с интерфейсом протокола и в метатаблице держат ссылку на оригинал и дергают его по мере вызова методов протокола
Snusmumriken
Да, попытка придти к балансу. Чтобы и криво не было, и гибкость была.
Чтобы криво не было, достаточно не писать криво ))
Процедурным проганьем можно писать ровно и чисто. Сложно но можно. ООП можно сделать ровным, хоть это и набор ограничений "для бобиков" над процедурами. Почти что угодно можно сделать ровным, вопрос только в том, будут ли абузить правила это или нет (будут, инфа 100%).
И задачей становится ввод таких ограничений, чтобы абузить было НЕЛЬЗЯ СОВСЕМ, но при этом была "гибкость". Совсем в идеале, чтобы суперпрофессионал и новичок писали бы буквально одно и то же, ибо поддержка.
Roma
Ок ок, ну это сейчас не так важно. Давай задачу на lua решим, как тебе идея выше? )
Snusmumriken
Да норм, на подумать.
Hello, World! 🎄
Всем привет, возможно ли выучить луа, за час, день?
Hello, World! 🎄
Hello, World! 🎄
Код:
t = {
a = 3,
b = 4
}
for key, value in pairs(t) do
print(key, value)
end
Почему вывод всегда разный?
Hello, World! 🎄
a 3
b 4
Hello, World! 🎄
b 4
a 3
Hello, World! 🎄
Snusmumriken
Ну не "крестам"/"плюсам" же.
Hello, World! 🎄
Snusmumriken
t = {
a = 3,
b = 4
}
keyorder = {"a", "b"}
for i, v in ipairs(keyorder) do
print(v, t[v])
end
Hello, World! 🎄
Snusmumriken
Можно сделать полуавтоматическим с метатаблицами.
Типа, такой тип таблицы "упорядоченная таблица".
Но тогда добавление и удаление ключей будет медленным.
Hello, World! 🎄
А какое отличие pairs от ipairs ?
Snusmumriken
pairs проходит по всем ключам-значениям таблицы, ipairs — только по числовым ключам.
Snusmumriken
Нет, если у тебя любые переменные хранится под ключом int, по порядку от 1 до N без дырок — по ним пройдётся ipairs.
Snusmumriken
Массивная часть таблицы кароч. Таблица как массив.
Hello, World! 🎄
Snusmumriken
А в лиа модули это вот это? https://www.lua.org/manual/5.1/manual.html#pdf-module
Hello, World! 🎄
lua .org/manual/5.1/manual.html#pdf-module
Hello, World! 🎄
Snusmumriken
Да, но это старая концепция.
Hello, World! 🎄
А как по новым стандартам?
Hello, World! 🎄
Или сейчас проще скачать движок где встроен lua ?
Snusmumriken
*module.lua*
local function foo(x, y)
return x + y
end
local function bar(x, y)
return x - y
end
return {
foo = foo,
bar = bar
}
*main.lua*
local m = require("module")
print(m.foo(10, 20)) --> 30
Snusmumriken
Hello, World! 🎄
Snusmumriken
Corona sdk, love2d, defold, cry engine?
Minecraft (computercraft)?
Hello, World! 🎄
И интересно также приложения писать и работать с api
Hello, World! 🎄
Snusmumriken
Проверь ))
Hello, World! 🎄
Hello, World! 🎄
Hello, World! 🎄
А приложения же есть движки для приложений?
Snusmumriken
Чего-чего? ))
Snusmumriken
"А коровы же есть молоко для коров?"
Hello, World! 🎄
и можно ли с api общаться в lua? В фомате json запросы get и post
Hello, World! 🎄
Чего-чего? ))
Ну движки для приложений или как их там назвать, gui
Snusmumriken
Это называется "(G)UI-библиотека". Не надо называть их "движками для приложений", тебя никто не поймёт.
Есть какое-то количество
http://lua-users.org/wiki/GraphicalUserInterfaceToolkits
Hello, World! 🎄
Snusmumriken
С каким таким api? ))
Snusmumriken
Можно. Но что такое API в твоём понимании?
Snusmumriken
Программная библиотека может иметь API?
Hello, World! 🎄
Snusmumriken
Может.
Snusmumriken
(тут был сложный вопрос, нафиг)
Hello, World! 🎄
А ну да, например же движки для игр
Hello, World! 🎄
Snusmumriken
Вот. Так бы и спросил. "Может ли луа делать веб-запросы?" Может. Но не сразу, надо научить (luasocket/luasec).
Hello, World! 🎄
Snusmumriken
Карочи, апи это программный интерфейс. Он может быть совершенно любым. У венды, например, есть COM-объекты, которые объединяют всё микрософтовское барахло в одну структуру, ты типа у себя в программе на питоне открываешь какой-нибудь эксель, если он установлен на компе — он при этом запускается без окна экселя. Потом ты им рулишь некоторое время, командуя "закрась эту ячейку, а в другую положи значение и дай мне то что получилось сохранив файл и распечатав его" и закрываешь. Это тоже API.
Любой программный интерфейс — API.
Hello, World! 🎄
Snusmumriken
Извиняться не надо, надо поднять собственный уровень образования.
Hello, World! 🎄
интересует веб api, запросы у сервера
Hello, World! 🎄
Snusmumriken
Ваще, для чистого луа есть сборочки вроде
https://luapower.com/
И вот тут вот сразу гора библиотек, в т.ч. сетевых и даже немного UI есть. Большая часть с норм документацией. Конкретно я использую эту сборку.
Hello, World! 🎄
Hello, World! 🎄
Я так понимаю lua в исполняемые файлы не компилируется?
Snusmumriken
А вот это интересный вопрос ))
Snusmumriken
И да и нет.
Snusmumriken
Можешь ли ты вшить луа-скрипт в кусок сишного кода, который будет запускать луёвую виртуальную машину и пускать по ней этот скрипт? Да. Происходит ли подобное само собой или средствами инструментов? Нет.
Hello, World! 🎄
Hello, World! 🎄
Я так понимаю, мне из си кода нужно запустить интерпретатор lua, и запустить в нём файл main.lua например.
Snusmumriken
Лично у меня просто есть чуть модифицированный интерпретатор луа, который автоматом запускает файл main.lua из той же директории где лежит этот модифицированный интерпретатор. Поэтому я могу редактировать скрипт и шарить его спокойно. Типа, прога + код к ней.
Hello, World! 🎄
Snusmumriken
Ды ))
Hello, World! 🎄
Если отдельный файл lua, то он его не упакует?
Snusmumriken
Он его может исполнить.
Snusmumriken
Но никто ни во что не упакует.