Dennis_Chikin 3 658 Опубликовано 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 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Artos 99 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 (изменено) Улыбает напор некоторых писателей, которые игнорируя сам вопрос, яростно набрасываются на ответ, в котором достаточно кратко и ясно дан ответ и кратко упомянуто про нюансы - "при неудачном написании может получаться ..." Авторы этих постов ставят под сомнение существование различных нюансов при использовании различного синтаксиса написания? Отрицают, что при неудачном написании кода могут быть нюансы-ошибки? Мною дан ответ именно на вопрос и в частности на "или ещё какие-нибудь нюансы? ", и приведен один из них. sapsan, Desertir вами отрицается само существование упомянутого нюанса? Нет, так на кой тратите время на нетребуемое авторами вопроса и ответа способы исправления этого частного нюанса (тем более один из ваниантов с пробелом уже дан)? Успокойтесь, когда спросят об этом тогда и пишите трактаты, а еще лучше - отвечали бы на сами вопросы, но по сути, а не ... потугами трактовать частности. Desertir, (по сути) ты хоть понимаешь о чем речь? Автор вопроса дал две формы записи, о второй (tbl.index) ты в ответе сказал НЕВЕРНО(!) - "во втором это ключ-строка, т.е. константа". Это такая же переменная как и в первой форме записи, или до тебя до сих пор это не дошло и требует разъяснения? И для чего расписывать частность (да еще второй раз). Никто не ставит под сомнение неидентичность двух записей при строковом значении index, или ты себя убеждаешь в очевидном? Речь о том, что автор вопроса не случайно спрашивает именно про tbl[index] где index может быть любым типом данных, которыми оперирует Lua, что в твоем ответе ставится под сомнение. Ну а дальнейшие твои же пояснялки (неясно для кого) о составных индексах как раз и попадают под упомянутые мною нюансы использования различного синтаксиса при написании, т.е.второй вариант - менее гибкок в использовании. sapsan, большое спасибо про упоминание названия "длинные скобки", а то и подзабыл и как-то не находил время освежить в памяти этот момент. Да и для других подобное напоминание не лишним будет. Цитата Баг не работает. Или его доработать, или удалить и не пугать людей. Прочти исходный вопрос и о том, что спрашивает автор... Если баг ворзможен - то об этом и говорит данный пример. Изменено 12 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
sapsan 336 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 (изменено) Artos, Показать Твоя рекомендация расставлять пробелы между парными скобками - бред. Нет "неудачных" написаний. Есть синтаксические ошибки. И написание a[b[c]] -- корректно. А личные "фэ" - в личку. P.S. Поздравляю с праздником профессиональным Изменено 12 Сентября 2012 пользователем sapsan 1 Ссылка на комментарий
Artos 99 Опубликовано 12 Сентября 2012 Поделиться Опубликовано 12 Сентября 2012 sapsan, где ты увидел рекомендации? Мною указан вариант, который позволил мне устранить ошибку при парсеринге написанного кода. В чем по твоему бред при использовании вместо tbl[tbl2] => tbl[ tbl2 ], что позволяет не задумываться о способах комментирования данной записи? По-мимо явных синтаксических ошибок существуют двузначности при написании кода, которые при парсинге строк могут вызывать ошибки/баги и мною называются - "неудачное" написание. Не нравится название (определение) - не используй. 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Halford 21 Опубликовано 15 Сентября 2012 Поделиться Опубликовано 15 Сентября 2012 Заканчиваем оффтопить и ходить по лезвию ножа. Ссылка на комментарий
AndreySol 215 Опубликовано 16 Сентября 2012 Поделиться Опубликовано 16 Сентября 2012 new_table[key1_name].param1 = {} new_table[key1_name].param1 = {} что означает такая запись ? В таблице new_table ключ key1_name имеет значение "пустая таблица param1" ? Ссылка на комментарий
ColR_iT 171 Опубликовано 16 Сентября 2012 Поделиться Опубликовано 16 Сентября 2012 (изменено) AndreySol, это значит, что таблица new_table будет иметь следующий вид: new_table = { [key1_name] = { ["param1"] = {} } }new_table = { [key1_name] = { ["param1"] = {} } } Изменено 16 Сентября 2012 пользователем ColR_iT 1 Ссылка на комментарий
AndreySol 215 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Понял Вас, спасибо. А что эа обращение к полям таблицы через '.', ранее не втречал такого. Поясните, если есть желание. Изменено 17 Сентября 2012 пользователем AndreySol Ссылка на комментарий
ColR_iT 171 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) AndreySol, скажем так - это некоторая особенность языка. Если совсем поверхностно и ты знаком хотя бы с основами ООП, то обращение к элементам таблицы через квадратные скобки - это обращение как к элементам таблицы, а через точку - как к структуре. Если глубже - тогда тебе читать документацию по Lua. P.S. Вот такие две записи эквивалентны: tbl = {} tbl["index1"] = 1 tbl.index1 = 1tbl = {} tbl["index1"] = 1 tbl.index1 = 1 Обе эти записи обозначают, что в таблицу tbl записан новый элемент равный числу 1, под индексом "index1". Есть и другие особенности применения точки для таблиц. Например в игре, все функции что ты используешь - это по сути одна большая таблица, если быть точным, то это таблица _G. И когда ты в какой-нибудь функции пишешь что-то вроде такого: file_name.function_name()file_name.function_name() Это означает, что нужно из таблицы file_name найти элемент function_name, а поскольку это функция, то ты вызываешь функцию. P.P.S. Буду рад любой критике. Изменено 17 Сентября 2012 пользователем ColR_iT 2 Ссылка на комментарий
AndreySol 215 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Критики не будет, от меня по крайней мере. А обращение через точку к элементам таблицы похоже на тоже самое для массивов в C++ и WinAPI ...? Ссылка на комментарий
Viнt@rь 50 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Ребят вопрос, возможно ли в LUA такое: ... for i=1,3 do local vName_..i = "vName_"..i end ...... for i=1,3 do local vName_..i = "vName_"..i end ... Изменено 17 Сентября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Viнt@rь , невозможно. Об'являя локальную переменную: local vName... - ее имя должно быть определено сразу и оно (имя) не имеет типа данных (даже не 'nil'). - т.о. уже при объявлении самой переменной ты получишь фатальную ошибку оператора конкатенации (сцепления строк). С глобальными переменными нечто подобное можно выполнять, используя представление их имен как this[ "vName"..i ], но ...какова цель в таких извратах? ;-) Изменено 17 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Viнt@rь 50 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Artos, есть одна идейка, сделать свой дебаггер/отладчик так сказать, точнее, усовершенствовать его, и выложить в люди, облегчить конечному пользователю использование данной вещички, вот с помощью таких "извратов" не надо будет создавать там к примеру 300 строк(каких то) за ранее и заставлять пользователя вписывать все под себя(к примеру в окне опций вкл выдачу/запись логовых функций из данного скрипта или нет(я имею ввиду инициализацию кнопок и тп)), сделать, так сказать, автономность, от пользователя останиться лишь закинуть скрипт куда надо и добавить в табличку, или в список в *.ltx(пока не определился), да и для себя тоже интересно, получиться ли такое или нет)) Изменено 17 Сентября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
ColR_iT 171 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Viнt@rь, возможно я не до конца понял твою мысль, но точно можно сделать так: tbl = {} for i=1, 3 do tbl["vName_"..i] = "vName_"..i endtbl = {} for i=1, 3 do tbl["vName_"..i] = "vName_"..i end Ссылка на комментарий
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-кнопки endfunction 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 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Раз уж мы в такой теме, то теоретически правильнее будет сказать не "С глобальными переменными нечто подобное можно выполнять", а "нечто подобное можно выполнять с полями таблиц". Т.к. в lua различают три вида переменных - глобальные, локальные и поля таблиц. Ссылка на комментарий
Artos 99 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) Gun12? я все же не стал бы жестко формулировать, т.к. вполне можно и к классам (а это 'userdata', см. пример выше) пристроиться... ;-) Да и как то ... объявляя в своем скрипте/модуле глобальную переменную: My_Variable = nil , довольно странно обзывать ее полем таблицы, хотя конечно в конечном счете это и так. :-) Изменено 17 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 Artos Говоря о переменных, мы говорим о их именах, а в случае таблиц - ключах, которые, как известно, могут быть любого типа (кроме nil конечно). Поэтому 'userdata' ничем не отличается от других. Я подозревал что может возникнуть вопрос, - "А чем отличается глобальная переменная от поля таблицы", но никак не наоборот. Впрочем ты сам и ответил, что в конечном счёте глобальная переменная является полем таблицы. Ссылка на комментарий
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)" Ссылка на комментарий
*Shoker* 322 Опубликовано 17 Сентября 2012 Поделиться Опубликовано 17 Сентября 2012 (изменено) А в Lua случаем нету возможности неявно передать в функцию название скрипта, откуда она была вызвана? У меня например в сталкере есть функция, которая всегда принимает первым аргументом имя скрипта, из которого она была вызвана. Есть желание сделать этот процесс неявным, может есть какие то глобальные флажки или спец-функции для этого? Изменено 17 Сентября 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
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 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти