Snusmumriken
Открываешь сурцы.
И смотришь :3
Они просты для понимания, хоть и написаны на сишке.
Снабжены комментариями и всем таким. Превосходный самодокументированный код.
Oleg
Теперь надо обработку кнопок сделать.
Oleg
Колбасу типа «a and b or c» я тоже юзаю. Мне кажется такая конструкция выглядит более понятней, чем «a ? b : c».
Yogurt
Вообще-то нет
Tverd
в "a and b or c " есть одна проблема... если b ложно, то С не будет )
fgntfg
Тернаную операцию лучше не использовать (сам любитель)
mva
Алсо:
> =(true and false or "moo")
[1] moo
Snusmumriken
Да, потому что таки все элементы цепочки должны быть истинными, чтобы вытащить последний элемент.
Disi
Интересно думаете?
Disi
#lua
https://github.com/zeta0134/LuaGB
B
Чет вроде и идут, а общее количество людей вроде особо и не меняется
Snusmumriken
Хех, расслабься. Раз в неделю по одному человеку - это немного. Цифра особо не изменится.
B
Тут еще нормально, люди как то сжато и по делу, а сижу в чате по blender'у тк там замутить пришлось, прям флуд, сотни сообщений, а по делу мелочь
Людей там столько же
Snusmumriken
Ну, время от времени и тут есть флуд, так что да. Мне главное чтобы были те, кто задают вопросы, чтобы я мог на них отвечать :3
Хобби такое.
Disi
Snusmumriken
Вот я и там!
B
есть что по json у кого?
Snusmumriken
Дофига либ, от чисто lua до офигенно быстрых но нуждающихся в компиляции cjson.
B
не не, пока только в плане знакомства
Snusmumriken
http://lua-users.org/wiki/JsonModules
B
с самым джейсоном в целом =)
просто видимо плохо гуглю, что то мне крайне мало чего попадается, и то только в купе с джавой или пхп
Snusmumriken
Да, как ты понимаешь, не стоит перегонять объекты напрямую в json, лучше экспортировать поля. Хм, кстати, можно добавить забавную функцию к своим классам "toTable", экспортирующую поля для дальнейшего восстановления.
Snusmumriken
Json - представление данных изначально из жаваскрипта. Инициализация - как будто код жаваскрипта. Ну там:
[1, 2, 3, 4, 5, "foo", "bar"]
или
{"foo":"bar", "bar":[1, 2, 3, "foo"]}
Единственное различие с луа-таблицами - ключи в кавычках, двоеточие вместо "равно", и квадратные скобки для списков.
Умеешь в таблицы - умеешь в json.
B
просто видел в той же короне как с луа нормально можна с ним работать, а сам джейсон вроде как позволяет кучковать инфу в удобочитаемом виде но толком информации больше и не нашел, мне пока посмотреть почитать то такое json и как оно там все
ага, ну вроде не страшно
Snusmumriken
Ты знаешь для чего используется? В целом, что такое json и с чем его едят?
Snusmumriken
Технически, это преобразователь строчек в объекты нужного тебе языка и обратно.
Ну, конвертер таблица -> строка -> таблица
Зачем? В основном, чтобы сохранять на диск, передавать объекты/структуры по сети. Просто сохранять, просто загружать.
Можно придумать ещё несколько способов применения.
B
ну те же к примеру тайловые проги для создания уровней хранят всю информацию в json файлах
Snusmumriken
Да, да, например так.
Darkest Dungeon хранит кучу конфигов в json'ах.
Да и я тоже.
Просто нужно грузить одну табличку из файлика при каждом запуске приложения. А при изменениях (громкость звука в игре повысили) - перезаписывать файл. Ну, ещё стоит иметь вшитую табличку дефолтных значений, шоб если файла нет - тут же записать.
Вот и всё : )
Snusmumriken
О, избранные, кстати, делают полноценные сериализаторы, которые ещё и функции сериализуют, и мета-данные типа __index. Но это уже не json.
B
оффтоп но : только сел смотреть, и тут корочи как воткнуть одно в другое...ща
"author" : {"f1" : "value","f2" : "value","f3" : "value"},
"book" : {"f1" : "value", "author", "f2" : "value"}
Roman
оу, знакомые f'ки!
Roman
это ответ от БД?
B
не не не, вопрос про внедрение автора в книгу
Roman
и я о том же!
Roman
это ответ от бд?
B
это на скору руку написаный пример
Roman
тогда в чем проблема
B
вот так просто можно писать?
"author"
как потом с этим работать?
Roman
"book" : {"f1" : "value", author: author, "f2" : "value"}
Roman
result.book.author — автор
B
а как выбирать если такого много?
если там писало трое, то пишем всех отдельно а как потом заганять их
Roman
не знаю в чем проблема, author = таблица, потом в другую таблицу присваевается tbl.author = author и все
Roman
но если вдруг нужны техники вытаскивания иерархий из постгреса - есть множество увлекательных наработок
Roman
он просто тоже неименованые поля выводит как f1, f2
Roman
вот про него и подумал
B
я просто сам запутался, мы ж по сути в джейсоне только храним данные в структурированной форме так?
Roman
в том то и его задумка - в нем данные в НЕ структурированной форме - делай в нем как хочешь
Roman
{"book": {..., "author": {"name": "..."}, ...}}
Roman
интересный аналог это GraphQL
B
я просто уже сам окончательно запутался
тобишь воткнуть верхнего автора как используемый обьект нельзя, это ж не яп
{
"author" : {
"id" : "value",
"name" : "value",
"surname" : "value"
},
"book" : {
"title" : "value",
"author" : "id",
"numOfPages" : "value",
"genre" : "value"
}
}
а типа потом нужно будет вытаскивать и работать как то с ним, это мне типа к книжке значит сразу приписывать ид автора что ю потом сравнивать с авторами на сходство
Roman
да, вот как раз графкюэльный пример нашел:
{
"posts": {
4565633: {
"author_id": 599,
...
},
4565634: {
"author_id": 599,
...
},
},
"autors": {
599: {
"posts": [4565633,4565634]
},
}
}
Roman
лучше id делать ключами, чтобы потом нужного автора не искать перебором
B
в смысле парой конкретно указывать куда сразу идти?
меня что то просто с простых вещей жесско паяет, вроде не сложно а понять не в состоянии
Roman
res = тот json выше
author = res.authors[599]
first_post = res.posts[author.posts[0]]
как-то так
B
обьекты\таблицы мы получаем как таблицы?
как я понял еще и с "нормальной" нумерацией с 0
Roman
две поправки по примеру моему: json не умеет числовые ключи, не луа) и глупый js сортирует как хочет, так что выдача в таком виде без порядка
Roman
забыл, json не только для js
Roman
тогда зависит от языка
B
тут ж кстати, встроеного ничего в луа по дефолту нет для джейсона?
просто у меня идет автокомплит не совсем понятно он от луа или от короны, просто пользуюсь атомом и там пачка пакетов разных
Roman
луа зе бест для встраивания, ничего лишнего, нужен json - бери библиотеки
Roman
вся забава с json'ом - в json'е есть тип null, в луа его нет, вот и выбирай библиотеку, которая нулл реализует как тебе нравится
B
а свою проверку какую то черкануть никак?
или заганять null как строку
ну типа сложно, там же по сути главное получать передавать данные а остальное можно уже попробовать обрабатывать на месте
Roman
конечно можно, не очень и сложно самому json составлять
Roman
не очень хорошо это, потому что cjson очень быстр, а самому так быстро не выйдет
Roman
по секрету, в json'е null нафиг не нужен, от него никакого эффекта в результате
Roman
я имел в виду то как пустые таблицы в jsonе хранятся - это разные библиотеки по-своему и решают
Snusmumriken
Хе-хе, на определённых данных, неплохо работает как раз формат аналогичный json'у.
authors = {
{name = 'Stephen Edwin King', bdate = 1974, books = {2}},
{name = 'Douglas Noël Adams', bdate = 1952, books = {1}}
}
books = {
{title = 'The Hitchhiker’s Guide to the Galaxy', date = 1979, author = 2},
{title = 'It', date = 1990, author = 1}
}
Чот такое. Тут в качестве id-ключа выступает номер в параллельной группе.
Выгрузка списка книг конкретного автора выглядит примерно так:
getBooksByAuthor(name)
local author
for i, v in ipairs(authors) do
if v.name == name then author = v end
end
if not author then return nil, 'not found' end
local booklist = {}
for i, v in ipairs(author.books) do
table.insert(booklist, books[v])
end
return booklist, #booklist
end
Для унификации всего этого счастья и автодополнения, нужны всякие первичные-вторичные ключи, язык запросов (или методы взаимодействия), механизмы поддержания целостности данных и прочая фигня.
Но зачем, если есть sql/nosql?
Roman
как кому нравится
Snusmumriken
Ниет, тут стандарты :3
В противном случае, json был бы опасен.
Roman
мне этот подход не нравится, надо думать как сериализатору сказать - это пустой массив, или это пустой хеш
Roman
по этому в моей реализации пустой массив или хеш - это его отсутствие
Snusmumriken
Не надо думать.
field = {}, перед тем как мы вообще начали парсить содержимое таблицы.
В общем, ты не прав, товарищ. Стандарты есть стандарты, или это уже не json.
Roman
да парсить то другое, я про превращение пустой таблицы в json строку
Snusmumriken
http://www.json.org/json-ru.html
Почитай ECMA, тут валяется.
А, пустая таблица превращается в скобки.
t = {yo = {}, foo = {1, 2, 3}, bar = {a = 10, b = 20}} ->
"{"yo":[], "foo":[1, 2, 3], "bar":{"a":10,"b":20}}"
Пустая таблица = пустой список. Инфа сотка. Обрабатываются одинаково.
Roman
нененене
Roman
какой это пустой список?