Page 11 of 24

Ликбез по Lua

Posted: Mon 02 Jul, 2012 05:41
by John Doe
В данной теме задаём вопросы по Lua.

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:

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.