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/35/#findComment-905371
Artos 99 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 (изменено) Улыбает напор некоторых писателей, которые игнорируя сам вопрос, яростно набрасываются на ответ, в котором достаточно кратко и ясно дан ответ и кратко упомянуто про нюансы - "при неудачном написании может получаться ..." Авторы этих постов ставят под сомнение существование различных нюансов при использовании различного синтаксиса написания? Отрицают, что при неудачном написании кода могут быть нюансы-ошибки? Мною дан ответ именно на вопрос и в частности на "или ещё какие-нибудь нюансы? ", и приведен один из них. sapsan, Desertir вами отрицается само существование упомянутого нюанса? Нет, так на кой тратите время на нетребуемое авторами вопроса и ответа способы исправления этого частного нюанса (тем более один из ваниантов с пробелом уже дан)? Успокойтесь, когда спросят об этом тогда и пишите трактаты, а еще лучше - отвечали бы на сами вопросы, но по сути, а не ... потугами трактовать частности. Desertir, (по сути) ты хоть понимаешь о чем речь? Автор вопроса дал две формы записи, о второй (tbl.index) ты в ответе сказал НЕВЕРНО(!) - "во втором это ключ-строка, т.е. константа". Это такая же переменная как и в первой форме записи, или до тебя до сих пор это не дошло и требует разъяснения? И для чего расписывать частность (да еще второй раз). Никто не ставит под сомнение неидентичность двух записей при строковом значении index, или ты себя убеждаешь в очевидном? Речь о том, что автор вопроса не случайно спрашивает именно про tbl[index] где index может быть любым типом данных, которыми оперирует Lua, что в твоем ответе ставится под сомнение. Ну а дальнейшие твои же пояснялки (неясно для кого) о составных индексах как раз и попадают под упомянутые мною нюансы использования различного синтаксиса при написании, т.е.второй вариант - менее гибкок в использовании. sapsan, большое спасибо про упоминание названия "длинные скобки", а то и подзабыл и как-то не находил время освежить в памяти этот момент. Да и для других подобное напоминание не лишним будет. Баг не работает. Или его доработать, или удалить и не пугать людей. Прочти исходный вопрос и о том, что спрашивает автор... Если баг ворзможен - то об этом и говорит данный пример. Изменено 12 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-728163
sapsan 337 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 (изменено) Artos, Твоя рекомендация расставлять пробелы между парными скобками - бред. Нет "неудачных" написаний. Есть синтаксические ошибки. И написание a[b[c]] -- корректно. А личные "фэ" - в личку. P.S. Поздравляю с праздником профессиональным Изменено 12 Сентября 2012 пользователем sapsan 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-728183
Artos 99 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 sapsan, где ты увидел рекомендации? Мною указан вариант, который позволил мне устранить ошибку при парсеринге написанного кода. В чем по твоему бред при использовании вместо tbl[tbl2] => tbl[ tbl2 ], что позволяет не задумываться о способах комментирования данной записи? По-мимо явных синтаксических ошибок существуют двузначности при написании кода, которые при парсинге строк могут вызывать ошибки/баги и мною называются - "неудачное" написание. Не нравится название (определение) - не используй. 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-728192
Halford 21 Опубликовано 15 Сентября 2012 Поделиться Опубликовано 15 Сентября 2012 Заканчиваем оффтопить и ходить по лезвию ножа. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-728909
AndreySol 215 Опубликовано 16 Сентября 2012 Поделиться Опубликовано 16 Сентября 2012 new_table[key1_name].param1 = {} что означает такая запись ? В таблице new_table ключ key1_name имеет значение "пустая таблица param1" ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729099
ColR_iT 171 Опубликовано 16 Сентября 2012 Поделиться Опубликовано 16 Сентября 2012 (изменено) AndreySol, это значит, что таблица new_table будет иметь следующий вид: new_table = { [key1_name] = { ["param1"] = {} } } Изменено 16 Сентября 2012 пользователем ColR_iT 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729106
AndreySol 215 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Понял Вас, спасибо. А что эа обращение к полям таблицы через '.', ранее не втречал такого. Поясните, если есть желание. Изменено 17 Сентября 2012 пользователем AndreySol Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729341
ColR_iT 171 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) AndreySol, скажем так - это некоторая особенность языка. Если совсем поверхностно и ты знаком хотя бы с основами ООП, то обращение к элементам таблицы через квадратные скобки - это обращение как к элементам таблицы, а через точку - как к структуре. Если глубже - тогда тебе читать документацию по Lua. P.S. Вот такие две записи эквивалентны: tbl = {} tbl["index1"] = 1 tbl.index1 = 1 Обе эти записи обозначают, что в таблицу tbl записан новый элемент равный числу 1, под индексом "index1". Есть и другие особенности применения точки для таблиц. Например в игре, все функции что ты используешь - это по сути одна большая таблица, если быть точным, то это таблица _G. И когда ты в какой-нибудь функции пишешь что-то вроде такого: file_name.function_name() Это означает, что нужно из таблицы file_name найти элемент function_name, а поскольку это функция, то ты вызываешь функцию. P.P.S. Буду рад любой критике. Изменено 17 Сентября 2012 пользователем ColR_iT 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729351
AndreySol 215 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Критики не будет, от меня по крайней мере. А обращение через точку к элементам таблицы похоже на тоже самое для массивов в C++ и WinAPI ...? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729500
Viнt@rь 50 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Ребят вопрос, возможно ли в LUA такое: ... for i=1,3 do local vName_..i = "vName_"..i end ... Изменено 17 Сентября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729537
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Viнt@rь , невозможно. Об'являя локальную переменную: local vName... - ее имя должно быть определено сразу и оно (имя) не имеет типа данных (даже не 'nil'). - т.о. уже при объявлении самой переменной ты получишь фатальную ошибку оператора конкатенации (сцепления строк). С глобальными переменными нечто подобное можно выполнять, используя представление их имен как this[ "vName"..i ], но ...какова цель в таких извратах? ;-) Изменено 17 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729548
Viнt@rь 50 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Artos, есть одна идейка, сделать свой дебаггер/отладчик так сказать, точнее, усовершенствовать его, и выложить в люди, облегчить конечному пользователю использование данной вещички, вот с помощью таких "извратов" не надо будет создавать там к примеру 300 строк(каких то) за ранее и заставлять пользователя вписывать все под себя(к примеру в окне опций вкл выдачу/запись логовых функций из данного скрипта или нет(я имею ввиду инициализацию кнопок и тп)), сделать, так сказать, автономность, от пользователя останиться лишь закинуть скрипт куда надо и добавить в табличку, или в список в *.ltx(пока не определился), да и для себя тоже интересно, получиться ли такое или нет)) Изменено 17 Сентября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729577
ColR_iT 171 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Viнt@rь, возможно я не до конца понял твою мысль, но точно можно сделать так: tbl = {} for i=1, 3 do tbl["vName_"..i] = "vName_"..i end Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729581
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Ну так и формулировал бы не кастрированный вопросик, а в контексте задачи ... Взгляни например на это (из скрипта спальника Симбиона): function CUI_DreamManager:InitCallBacks() self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.OnBtnQuit, self) for i=1,5 do self["OnBtnAct_"..i] = function() self:OnBtnAct(i) end self:AddCallback("btn_"..i, ui_events.BUTTON_CLICKED, self["OnBtnAct_"..i], self) end end function CUI_DreamManager:OnBtnAct(iNum) --/ обработка iNum-кнопки end - и подобным образом вполне можно избегать десятков строк и отдельных функций по каждой кнопке... ;-) (но это уже скорее тема для "Скриптования" а не по чистому Lua) Изменено 17 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729582
Nazgool 251 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Раз уж мы в такой теме, то теоретически правильнее будет сказать не "С глобальными переменными нечто подобное можно выполнять", а "нечто подобное можно выполнять с полями таблиц". Т.к. в lua различают три вида переменных - глобальные, локальные и поля таблиц. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729583
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Gun12? я все же не стал бы жестко формулировать, т.к. вполне можно и к классам (а это 'userdata', см. пример выше) пристроиться... ;-) Да и как то ... объявляя в своем скрипте/модуле глобальную переменную: My_Variable = nil , довольно странно обзывать ее полем таблицы, хотя конечно в конечном счете это и так. :-) Изменено 17 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729590
Nazgool 251 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Artos Говоря о переменных, мы говорим о их именах, а в случае таблиц - ключах, которые, как известно, могут быть любого типа (кроме nil конечно). Поэтому 'userdata' ничем не отличается от других. Я подозревал что может возникнуть вопрос, - "А чем отличается глобальная переменная от поля таблицы", но никак не наоборот. Впрочем ты сам и ответил, что в конечном счёте глобальная переменная является полем таблицы. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729598
Viнt@rь 50 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) ColR_iT, Artos, спс В принципе, я догадывался, что с полями таблиц можно такое творить, мне интересно было узнать, можно ли такое делать именно с такой формой обьявления переменной(local vName="vName"; vName="vName"). ЗЫ Artos, да, чет не подумал заглянуть в твои скрипты)) обычно оттуда и тяну все интересное/полезное/нужное, а тут совсем вылетело из головы) Изменено 17 Сентября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729599
*Shoker* 322 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) А в Lua случаем нету возможности неявно передать в функцию название скрипта, откуда она была вызвана? У меня например в сталкере есть функция, которая всегда принимает первым аргументом имя скрипта, из которого она была вызвана. Есть желание сделать этот процесс неявным, может есть какие то глобальные флажки или спец-функции для этого? Изменено 17 Сентября 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729601
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Viнt@rь, для SIMBION'a существует технологический аддон SMB-SHOC_Dbg_Tools (~20.2 кБ , запакован в xdb) где возможно аналог того, что затеял или то, что может быть полезным для твоей затеи ;-) *Shoker*, этот вопрос уже обсуждался. Хочешь подобное в игре (в чистом Lua это есть) - расширяй движек до активизации name_space 'debug' и почитай про его возможности и использование. В ЧН и ЗП в _G.printf(fmt,...) остались остатки примера использования от разрабов. Gun12, поэтому если суть/смысл не меняется - вполне допускаю удобное наименование, тем более более привычное для большинства на этом форуме, (порою даже жаргонарии). :-) Изменено 17 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/35/#findComment-729614
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти