usernameak
сейчас накидаю на коленке
usernameak
-- entity_type is externally defined function entity_type.on_entity_create(entity) entity.data.test_property = 20 end entity_type.register_properties({ test_property = { type = game.property_type.integer, default_value = 0, sync_from_server = true } })
usernameak
я конечно могу сделать что-то в стиле local entity_type = game.entity_types.get_type('ExampleEntity')
usernameak
кстати, я случайно узнал, что в lua зачем-то есть такой синтаксис комментариев :D --[=====[ --]=====]
usernameak
Не комментариев, а строк
и комментариев тоже!
кстати, я случайно узнал, что в lua зачем-то есть такой синтаксис комментариев :D --[=====[ --]=====]
Чтобы можно было закомментировать код с комментарием (или строкой) внутри, и не только.
На самом деле, удобная и хорошо придуманная штука.
-- entity_type is externally defined function entity_type.on_entity_create(entity) entity.data.test_property = 20 end entity_type.register_properties({ test_property = { type = game.property_type.integer, default_value = 0, sync_from_server = true } })
КМК спокойно можешь делать трюк с _G. Только, зачем вообще заморачиваться с загрузкой через load?
usernameak
> Только, зачем вообще заморачиваться с загрузкой через load? а что, можно ещё как-то загрузить?)
Может, я не понял задачу или окружение, но с require никак?
usernameak
А, ты хочешь именно иметь переменную EntityType в скрипте, другие варианты организации кода не нравятся. Ну тогда ок, я бы сделал через окружение в таком случае.
да я уже думаю, этот вариант организации кода - так себе
Ну как, в Defold даже примерно так сделана регистрация методов, ЕМНИП.
А, нет, там сразу в глобальную таблицу пишешь, а потом методы оттуда выковыриваются. В целом, Lua штука гибкая, можно делать как хочешь.
anton
\o вызываю функцию lua_pushnumber(l, pp.GetEstimate()); то есть передаю r-value, и кажется, это ведет к UB. (иногда в луа попадает нормальное значение, иногда - какой-то мусор) Сам метод GetEstimate возвращает double, по значению. Так может быть, или проблема где-то в другом месте?
LISP
А на схему не получится?
anton
Проблема в другом месте, так как pushnumber принимает по значению (это же си). Это значит, что GetEstimate возвращает неверный результат
Дело в том, что в попытках это отдебажить, ставлю перед lua_pushnumber вывод в лог, и мусор пропадает, или даже если делаю double estimate = pp.GetEstimate(); lua_pushnumber(l, estimate); мусор тоже пропадает хотя, это, конечно, ничего не доказывает
А на схему не получится?
В смысле, к языку Scheme? Там же зоопарк.
LISP
Ну, на гуиль или на чикен
Большая часть биндится генератором, только несколько функций пришлось вручную написать. Если умеешь биндить к ним (я не умею) — там пару вечеров посидеть, думаю.
Не понял тебя...
Я намекаю, что если лично у тебя есть интерес к биндингу к Схеме и умение для неё биндить, добавить поддержку — дело пары вечеров.
В данном случае либа для Схемы, позволяющая использовать в Схеме библиотеку SunVox.
LISP
В данном случае либа для Схемы, позволяющая использовать в Схеме библиотеку SunVox.
А ну это можно. Где там доки посмотреть, что и где у sunvox дёргать?
А ну это можно. Где там доки посмотреть, что и где у sunvox дёргать?
https://www.warmplace.ru/soft/sunvox/sunvox_lib.php Но про пару вечеров я имел в виду, если мой генератор поправить, чтобы для Схемы генерировал. Хотя, МБ и так получится.
uvicorn
Привет! в луа есть метод, чтобы из строки "zsh" получить "Zsh", а из "pthon v3" - "Pthon v3" ?
Arslan
Привет! в луа есть метод, чтобы из строки "zsh" получить "Zsh", а из "pthon v3" - "Pthon v3" ?
function string:title() return self:sub(1,1):upper()..self:sub(2) end > s = "qwerty" > s:title() Qwerty
Arslan
Правда работает только с латиницей
𝚌𝚑𝚊𝟶𝚝!𝚔
а utf в луа не завезут?
В 5.3 есть встроенная библиотека utf8, для более старых есть точно такая же отдельная.
Snusmumriken
Но эта библиотека не содержит в себе все таблицы всех символов, так что делать lower/upper всё равно не получится, пока свои таблицы не заведёшь.
Snusmumriken
Но и без той библиотеки можно делать так: -- твоя таблица замен -- сам скрипт сохранён в utf8 local upper = { ["а"] = "А", ["б"] = "Б", .. } function my_upper(str) return str:gsub("[\1-\127\194-\244][\128-\191]*", upper) end
uvicorn
подскажите пожалуйста, что я делаю не так?
uvicorn
Snusmumriken
end забыл.
𝚌𝚑𝚊𝟶𝚝!𝚔
В 5.3 есть встроенная библиотека utf8, для более старых есть точно такая же отдельная.
а вот прям нативная поддержка не планируется, шоб как в жабаскрипте забыть, что такое кодировки?
uvicorn
end забыл.
оййййй, да. спасяб
𝚌𝚑𝚊𝟶𝚝!𝚔
да вроде бы везде есть, в консоли, в браузере, в бд, даже сорцы в utf хранятся)
𝚌𝚑𝚊𝟶𝚝!𝚔
насчет сложности это конечно да, поэтому и хочется что б просто работало сразу
Snusmumriken
а вот прям нативная поддержка не планируется, шоб как в жабаскрипте забыть, что такое кодировки?
В жабаскрипте ты всё равно работаешь с кодировками. И тащишь свой iconv, и конвертируешь одно в другое в третье.
Snusmumriken
А так — просто берёшь и отказываешься работать с чем-то кроме utf8. И забываешь про все другие кодировки.
Anatoliy
Ребята привет, стало вдруг интересно - а в луа есть что то вроде сишного include? Т.е. чтобы просто указать на файл с кодом и код из этого файла целиком как есть во время выполнения интерпретатором вставился в это место
Igor
Ну есть же оператор require
mva
во-первых, здесь вместо инклуда require
Igor
Можешь спокойно создавать библиотеки, подключать их
mva
во-вторых, то что ты описываешь похоже на dofile()
Igor
А в-третьих, лучше соблюдать какую-то локальную видимость, во избежание конфликтов имен и прочего в будущем
Igor
Правила такие же, как и в любом языке, и проблемы с глобальной областью видимости абсолютно такие же
mva
вроде как глобальные реквайры deprecated ещё с 5.1
Anatoliy
во-вторых, то что ты описываешь похоже на dofile()
Ну require и dofile это не совсем как include ну да ладно я понимал что нету
mva
Ну require и dofile это не совсем как include ну да ладно я понимал что нету
ну, опиши более понятным языком что ты хочешь
Anatoliy
ну, опиши более понятным языком что ты хочешь
Уже написал же, читать не умеешь?
mva
и да, кстати, с точки зрения языка (C/C++) header-only библиотеки - зло. Ну и стоит ли говорить что в заголовках не должно быть кода. Поэтому твой первоначальный вопрос вызывает некое недоумение.
mva
Уже написал же, читать не умеешь?
мне надо было выделить жирным фразу "БОЛЕЕ ПОНЯТНЫМ ЯЗЫКОМ"?
Igor
Что это за точка зрения такая, можешь описать?
Lucky
Втащите кто-нибудь ему томиком PiL
Ребята привет, стало вдруг интересно - а в луа есть что то вроде сишного include? Т.е. чтобы просто указать на файл с кодом и код из этого файла целиком как есть во время выполнения интерпретатором вставился в это место
Ты можешь использовать сишный или другой препроцессор точно так же, но тебе это скорее всего не нужно. Ну т.е. это не совсем сишный механизм, но он не особо хороший.
Snusmumriken
Ну require и dofile это не совсем как include ну да ладно я понимал что нету
Во-первых, использование инклюдов как "вставку кода куда попало" — признак чего-то кривого, там довольно много соглашений на тему "что и как вставлять", чтобы код не превратился в говнокод. Во-вторых, dofile делает ровно то что написано: в момент выполнения, считывает файл (как функцию) и исполняет его содержимое в точке вызова. Делает это каждый раз, соответственно файл скрипта можно изменять, кеширования не будет, но будет чтение с диска, что замедлит процесс исполнения. В третьих, сишка имеет одну очень прикольную штуку, называется "препроцессор", который как раз и берёт, и склеивает все файлы в один, подставляет текст сишного кода в инклюды и всё такое прочее. Но ты можешь сделать препроцессор, который будет склеивать луёвые скриптики в точках инклюда по своей метке: код это просто текст, и с ним можно работать как с текстом, используй свои супер-силы регулярных выражений, и сделай с ним что угодно.
mva
если не бот, и пишешь по теме, то перепости без ссылок
mva
// а если бот и/или спамер, то не надо
Pavel
Добрый день, как правильно загрузить модуль из подкаталога родительского каталога? в package.path добавлять?
Anatoliy
ну и dofile делает ровно то, что в этом сообщении написано после "т.е.". Что не так?
Да ты прав dofile делает практически тоже самое что и сишный include, ну может несовсем но для простого кода хватает, просто непользовался им раньше незнал, спасибо, я просто хотел все глобольные переменные вынести в отдельный ini файл чтобы не лазить каждый раз в скрипт их поправлять, как раз dofile очень годится для этого
LISP
и да, кстати, с точки зрения языка (C/C++) header-only библиотеки - зло. Ну и стоит ли говорить что в заголовках не должно быть кода. Поэтому твой первоначальный вопрос вызывает некое недоумение.
Вот сколько прогаю на крестах никогда не понимал почему хедер-онли библиотеки зло. Я придерживался этого правила, но всегда вызвало недоумение. Поясните прикол
Да ты прав dofile делает практически тоже самое что и сишный include, ну может несовсем но для простого кода хватает, просто непользовался им раньше незнал, спасибо, я просто хотел все глобольные переменные вынести в отдельный ini файл чтобы не лазить каждый раз в скрипт их поправлять, как раз dofile очень годится для этого
Нет, это делает не практически то же самое, а абсолютно другое: просто вставляет кусок кода в указанное место. Скажем, в C сработает вот это: tea@teapot ~/w/c_test> cat main.c #include <stdio.h> int main() { #include "var.h" printf("%d\n", var); return 0; } tea@teapot ~/w/c_test> cat var.h int var = 5; tea@teapot ~/w/c_test> gcc main.c -o main tea@teapot ~/w/c_test> ./main 5 В Lua это не сработает.
mva
Да ты прав dofile делает практически тоже самое что и сишный include, ну может несовсем но для простого кода хватает, просто непользовался им раньше незнал, спасибо, я просто хотел все глобольные переменные вынести в отдельный ini файл чтобы не лазить каждый раз в скрипт их поправлять, как раз dofile очень годится для этого
плохая идея. Лучше для этого использовать либо конфиг с сериализацией/десериализацией, либо реквайрить этот конфиг. Просто переменные не делать глобальными (глобальные переменные - зло). А если некоторые очень надо, то подсовывать их в _G/_ENV