Dennis_Chikin 3 665 Опубликовано 4 Января 2015 Поделиться Опубликовано 4 Января 2015 (изменено) С чего начинать и где взять. Установка Lua:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=629106 Руководство «Программирование на языке Lua», третье издание:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905308 Изменено 2 Марта 2015 пользователем Kirgudu Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-905371
Это популярное сообщение. Nazgool 251 Опубликовано 20 Июля 2015 Это популярное сообщение. Поделиться Опубликовано 20 Июля 2015 (изменено) Вот, черт возьми, как-то раньше и не приходилось сталкиваться. А тут выяснилось. В общем для тех, кто ещё не попадался на этом. Я всегда считал, что при работе со строками, подобные записи : x = s:match('pattern') -- и x = string.match(s, 'pattern') эквивалентны. Оказывается нет. В первом случае 's' обязана быть строкой. А во втором не обязательно. В функции 'string.match' (не проверял, но по ходу и в других должно быть также) производится попытка преобразования 's' в строку. Теперь использовать обращение к методу буду с осторожностью. Изменено 20 Июля 2015 пользователем Nazgool 3 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-952349
RayTwitty 587 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) Вопрос следующего характера - как в Lua можно грамотно экранировать символ "\"? Чтобы при совпадении с "n" не получался символ перехода на следующую строку ("\n"). Это нужно например в окнах с режимом ComplexMode. Пока сделал такой вариант string.gsub(s, "\\", "/")но, наверно можно придумать что-то поизящнее... Изменено 21 Августа 2015 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958811
Desertir 202 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 Чтобы при совпадении с "n"Не понял, т.е. есть типа строки yes\no? Если есть строка "positive\negative" и надо именно в таком виде и выводить, то придется заменять двумя слешами. А два слеша в коде это или [[\\]] или "\\\\". Т.е. твой же вариант только string.gsub(s, "\\", "\\\\")Минус очевиден, замена будет всех слешей, даже тех, кто не при чем. Поизящнее? Использовать регулярные выражения. Вот, вдруг натолкнет на умные мысли. PS: тут или править исходные данные, если они более менее статичны, или заменять что то плохое на что то хорошее, больше никак. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958813
RayTwitty 587 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 т.е. есть типа строки yes\no?Да. если они более менее статичныДанные не статичны, а постоянно меняются. На самом деле оказалось, что внутри режима ComplexMode, идет поиск символа "\\n". Пробовал заменить его на символ с одним слешем - в итоге в строке его вообще не оказалось. Видимо, остается просто использовать мой первый вариант. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958932
Desertir 202 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 идет поиск символа "\\n"Вот прямо с двумя слешами? Надо четко представлять, что на самом деле находится в строке. на символ с одним слешем - в итоге в строке его вообще не оказалосьЭм, так это, новая строка же, ну или какой другой спец символ. string.gsub(s, "\\n", "\n") - в результирующей строке ты не найдешь слеша. Ты же в курсе, что слеш - знак экранирования? Чтобы написать слеш в строку, надо написать 2 слеша в коде и т.п. PS: возможно я опять что не понял ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958958
RayTwitty 587 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) @Desertir, да тут наверно уже вопрос не Lua, а чисто сталкерских заморочек и парсинга строки в режиме ComplexMode.http://www.lua.org/cgi-bin/demoprint("vasya\new")||\/ vasya ew print("vasya\\new")||\/ vasya\new Второй вариант работает нормально в Lua, но в сталкере он также расценивается как перенос на следующую строку. Так что видимо ничего лучше обратного слеша не придумать в моем случае. Изменено 21 Августа 2015 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958967
Nazgool 251 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) , Да также второй вариант печатает и в игре - 'vasya\new'. У меня по крайней мере. Правда стоит lua by RvP. Может и поэтому ??? Изменено 21 Августа 2015 пользователем Nazgool Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958970
RayTwitty 587 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) Да также второй вариант печатает и в игре - 'vasya\new'.В окне (статике) в режиме ComplexMode? st = CUIStatic() st:Init(0, 0, 1024, 768) st:SetText("vasya\\new") st:SetTextComplexMode(true) get_hud():AddDialogToRender(st) Правда стоит lua by RvP. Может и поэтому ???Не могу знать, но не думаю что как-то влияет это расширение. Изменено 21 Августа 2015 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958971
Nazgool 251 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) Попробуй st:SetText([[vasya\new]]) Это конечно то же самое что и "vasya\\new", но SetTextComplexMode явно работает не так как в lua. Хотелось бы исключить все (нормальные) варианты. Изменено 21 Августа 2015 пользователем Nazgool Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958976
RayTwitty 587 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 @Nazgool,st:SetText([[vasya\new]]) ||\/ vasya ew st:SetText([[vasya\\new]]) ||\/ vasya\ ew Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958980
Nazgool 251 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 (изменено) Что сказать? Видимо строка разбирается в С, а не в lua.Ничего тут не сделаешь, кроме как переписывать в движке. Изменено 21 Августа 2015 пользователем Nazgool 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-958985
Dennis_Chikin 3 665 Опубликовано 16 Декабря 2015 Поделиться Опубликовано 16 Декабря 2015 Что-то задумался: А есть ли вариант захвата типа (%b()), но для случая, когда искомых () может быть, а может и не быть (и быть что-то другое, которое и захватывать надо иначе) ? Это все к тому же вопросу об xr_logic.parse_infop() Соблазнительно разрешить в аргументах пробелы. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980724
Serge! 127 Опубликовано 16 Декабря 2015 Поделиться Опубликовано 16 Декабря 2015 %b() %b?() Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980797
Dennis_Chikin 3 665 Опубликовано 16 Декабря 2015 Поделиться Опубликовано 16 Декабря 2015 (изменено) " +test( 34: 55 56 : 57:66 ) -test1 +test2(test0 )" Мне, пожалуйста, +, test, 34: 55 56 : 57:66 -, test1 +, test2, test0 для 2-й строки третьим захватом можно хоть nil, хоть "" - без разницы. Изменено 16 Декабря 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980801
Charsi 441 Опубликовано 17 Декабря 2015 Поделиться Опубликовано 17 Декабря 2015 (изменено) for sgn, fn, args in s:gmatch("([%+%-])([%w_]+)%s*%(?([^%)%+%-]*)") do print(sgn, fn, args) end Изменено 17 Декабря 2015 пользователем Charsi Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980810
naxac 2 605 Опубликовано 17 Декабря 2015 Поделиться Опубликовано 17 Декабря 2015 @Dennis_Chikin, так, может? ([%w_]+)(%b()*) Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980811
Dennis_Chikin 3 665 Опубликовано 17 Декабря 2015 Поделиться Опубликовано 17 Декабря 2015 (изменено) А проверить ? Если б работало - не спрашивал бы. В общем, я посмотрел на получающееся у меня for v1, v2, v3 in string.gfind( s, "(%S)([^%s%(%-%+%~%=%!]+)%s*%(?([^%)%-%+%~%=%!]*)%)?" ) do и понял, что лучше таки в два приема, с for v1, v2 in string.gfind( s, "(%S)([^%-%+%~%=%!]+)" ) do ...else v1, v2 = string.match( v2, "([^%s%(]+)%s*%(?([^%)]*)" ) Если v1 == "=" или "!". Так, пожалуй, все-таки и быстрее, и вменяемее. Изменено 17 Декабря 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980816
Serge! 127 Опубликовано 17 Декабря 2015 Поделиться Опубликовано 17 Декабря 2015 (изменено) @Charsi, для полного соответствия ТЗ я бы добавил ещё одну строчку. Я не знаю зачем @Dennis_Chikin нужны были запятые для разделения захватов, но раз обозначил такое условие, то пусть он их и получит. local str = "+test( 34: 55 56 : 57:66 ) -test1 +test2(test0)" for sgn, fn, args in str:gmatch("([%+%-])([%w_]+)%s*%(?([^%)%+%-]*)") do sgn = fn ~= '' and sgn..',' or sgn; fn = args ~= '' and fn..',' or fn print(sgn, fn, args) end Изменено 26 Декабря 2015 пользователем Murarius Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-980826
Неравнодушный сталкер vampirnik77 126 Опубликовано 25 Января 2016 Неравнодушный сталкер Поделиться Опубликовано 25 Января 2016 Доброго времени суток Комрады! Вопрос, выполнится ли тело if'a? ... local bool = false if not bool then какой-то кода end ... Вернулся получается... Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-989476
Kirgudu 1 370 Опубликовано 25 Января 2016 Поделиться Опубликовано 25 Января 2016 @vampirnik77, выполнится. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/52/#findComment-989513
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти