Page 11 of 24
Ликбез по Lua
Posted: Mon 02 Jul, 2012 05:41
by John Doe
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 17:28
by zg
Latest post of the previous page:
последний раз.
panel.GetSelectedPanelItem(nil,0/1,N+1)
возвращает nil. то что вы потом пытаетесь этот nil индексировать и получаете ошибку — это ваши личные половые трудности. и с этим вам точно не сюда.
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 17:51
by AleXH
Всё равно как-то не логично - если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil? Зачем предварительно перед обращением к ней проверять существует ли она? Почему не работать по возвращённому результату? - Таков Lua?
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 18:41
by Shmuel
AleXH wrote: если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil?
Ну и заодно уже, почему бы при вызове несуществующей функции не вернуть nil? Почему бы при выполнении выражения 5+nil не вернуть 5? И т.д. и т.п.
Вообще-то меня уже начали доставать вопросы некоторых, не изучающих документацию. Да ещё и не желающих осмыслить ответы, которые им дают.
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 19:11
by Aidar
Просто используйте конструкцию
Code: Select all
fn=(panel.GetSelectedPanelItem(nil,0/1,N+1) or {}).FileName
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 19:36
by AleXH
Shmuel, Если нет желания или настроения, то отвечать однозначно не стоит - вам за это никто не платит, не надо воспринимать это как работу, иначе хобби превратится в тягость, а такого допускать нельзя.
Aidar, кстати да, часто применяю такой метод с переменными. За подсказку спасибо.
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 19:42
by Shmuel
AleXH wrote:Shmuel, Если нет желания или настроения, то отвечать однозначно не стоит - вам за это никто не платит, не надо воспринимать это как работу, иначе хобби превратится в тягость, а такого допускать нельзя.
В подобных советах никак не нуждаюсь, тем более после ваших сегодняшних постов в форуме.
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 19:49
by AleXH
Shmuel, это не совет, не инструкция к действию, это мой взгляд на общение на форуме, так, как вижу его я. Я не требую ответа, не навязываю собственного мнения, я его просто высказываю. если я не хочу отвечать, либо считаю это нецелесообразным, либо нет времени,желания и пр., то просто откладываю на туманное "потом". Это позволяет сохранить позитивное отношение к форуму (любому).
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 21:18
by Shmuel
Просьба к модераторам: убрать офф-топик (предыдущие 3 поста) в другое место. А данный пост можно удалить.
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 21:26
by John Doe
Aidar wrote:Просто используйте конструкцию
Code: Select all
fn=(panel.GetSelectedPanelItem(nil,0/1,N+1) or {}).FileName
Или как-то так:
Code: Select all
local item = panel.GetSelectedPanelItem(nil,0/1,N+1)
fn = item and item.FileName
LuaMacro — Lua как язык макросов
Posted: Sat 27 Dec, 2014 21:29
by John Doe
AleXH wrote:Всё равно как-то не логично[...]
почему[...]
Зачем[...]
Почему[...]
- Таков Lua?
Именно.
И обсуждать это на данном форуме не очень осмысленно.
В теме плагина LuaMacro это точно оффтопик.
Ликбез по Lua
Posted: Sun 28 Dec, 2014 06:05
by EGez
AleXH wrote: [ . . . ] если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil? [ . . . ]
Назовите пожалуйста хоть один язык, где такое пройдет без ошибки? Как вы у
nil
(
null
/
NULL
и т.д.) хотите спросить
.FileName
???
Мне не знаком ни один язык, где такое без ошибки возможно. Почему бы тогда не придумать язык "make all good" и оно само должно за вас все написать? Самому проверить никак нельзя? Что за детский сад?
Ликбез по Lua
Posted: Sun 28 Dec, 2014 07:52
by AleXH
EGez, вы уже второй, кто отвечает вопросом на заданный вопрос.
В свете развернувшейся вчера полемики, ответ RTFM как ни странно, оказался одновременно и самым малоинформативным и самым продуктивным. Из интереса можно посчитать количество написанных в ответ постов, и ни в одном из них нет прямого ответа на вопрос. Это не упрёк, это наблюдение.
А посты с обсуждением, да, надо удалить.
Ликбез по Lua
Posted: Mon 29 Dec, 2014 23:51
by EGez
AleXH wrote: EGez, вы уже второй, кто отвечает вопросом на заданный вопрос.
Каков привет - таков ответ. Какого ответа ожидать, если задать вопрос на подобии "почему земля круглая?"? Попробуйте задать его в кругу своих друзей-сверстников.
Какого ответа вы ожидали на ваш вопрос?:
AleXH wrote:[ . . . ] если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil? [ . . . ]
Раз уж на то пошло, то с этим вопросом вы здесь в любом случае не по адресу, вам сюда:
http://www.lua.org/contact.html
Так нормально?
Ликбез по Lua
Posted: Tue 30 Dec, 2014 09:51
by AleXH
EGez wrote: Каков привет - таков ответ. Какого ответа ожидать, если задать вопрос на подобии "почему земля круглая?"? Попробуйте задать его в кругу своих друзей-сверстников.
У вас есть дети? Вы им тоже отвечаете на вопрос "почему земля круглая?" - RTFM? - Если вопрос требует объёмных объяснений, либо предположительно потянет за собой таковые, то отсылку к RTFM хорошо бы сопроводить пояснением этого. Неумение отвечать на "глупые" вопросы говорит о не только о недостатке знаний у вопрошающего, но и об отсутствии соответствующего умения у отвечающего. Если вопрос "не профильный" для ветки в которой он задан, то нужно об этом сказать сразу. Если же причина в том, что в данный момент нет желания/времени отвечать - не отвечай, никто не заставляет.
Обращаясь к сообществу, любой задающий вопрос предполагает услышать ответ, сохраняющий ему время, в противном случае задавать вопросы нет смысла, ведь обратиться к изучению документации при наличии свободного времени можно
всегда.
Ликбез по Lua
Posted: Tue 30 Dec, 2014 10:36
by ladserg
AleXH wrote:LuaMacro, в случае отсутствия выделенного файла на панели, при присваивании переменной значения panel.GetSelectedPanelItem(nil,1,1).FileName, выдаёт сообщение attempt to index a nil value - правильно ли это идеологически? Разве не правильно просто возвращать nil?
Чот как кто много оффтопика на пустом месте.
nil в данных условиях возвращается, но функцией
panel.GetSelectedPanelItem(nil,1,1), и если подходить к ситуации идеологически верно, то (как уже отметил
John Doe) идеологически правильно было написать примерно так:
Code: Select all
-- Получим первый выделенный файл
item=panel.GetSelectedPanelItem(nil,1,1)
-- Если оказалось, что ни один файл не выделен,
-- то берёмся за файл под курсором
if item == nil then
item=panel.GetCurrentPanelItem (nil, 1)
end
-- Получим имя файла
fn=item.FileName
Выдавать исключение при попытке к обращению nil.FileName - это тоже верно, исходит оно ещё из истоков программирования на ассемблере/C/C++, где имя структуры(в lua они зовутся таблицами) представляло собой всего лишь ссылку на адрес в ОЗУ, а имя поля (в данном случае FileName) являлось всего лишь смещение от адреса в байтах. Если адрес структуры указывал в никуда, то и смещение тоже было ошибочным, посему оставлять это без проверки было грубейшей ошибкой, приводившей нередко к плачевным результатам. Вот и появилась такая проверка в языках более высокого уровня.
Советую вам значения функций, возвращающих таблицы, проверять прежде чем обращаться к полям таблицы. Так же заметьте: если функция (в данном случае
panel.GetSelectedPanelItem(nil,1,1)) вернула
nil, то это всё же что то значит (в данном случае - не выделено ни одного файла), и на это тоже нужно обращать внимание и как то обрабатывать (например если не выделено ни одного файла, то взять файл под курсором).
Как то так.
Ликбез по Lua
Posted: Tue 30 Dec, 2014 10:54
by John Doe
AleXH wrote: Обращаясь к сообществу, любой задающий вопрос предполагает услышать ответ, сохраняющий ему время, в противном случае задавать вопросы нет смысла, ведь обратиться к изучению документации при наличии свободного времени можно всегда
Вопрос изначально звучал не как вопрос, а как претензия к LuaMacro, отсюда и реакция отвечающих.
И давайте уже закончим это мусолить, чтобы никого не пришлось банить.
P.S
Относится не только к AleXH.