Ликбез по Lua

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Ликбез по Lua

Post by John Doe »

В данной теме задаём вопросы по Lua.

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Ликбез по Lua

Post by John Doe »

Latest post of the previous page:

AleXH wrote:bad argument #1 to 'pairs' (table expected, got nil)
Потому self это не магия, и работает не так.

s1,s2=_G.country_t:f("hungary") это всего лишь синтаксический сахар для s1,s2=_G.country_t.f(_G.country_t,"hungary")
Очевидно через luaexplorer вы это двоеточие не можете использовать, а значит надо честно передавать таблицу параметром.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Ликбез по Lua

Post by John Doe »

И ещё один момент:
AleXH wrote: всё работает для локальных таблиц, но для глобальных нет
country_t = ...
_G.country_t = ...

В обоих случаях мы имеем дело с глобальными переменными, локальных тут нет.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

LuaMacro, в случае отсутствия выделенного файла на панели, при присваивании переменной значения panel.GetSelectedPanelItem(nil,1,1).FileName, выдаёт сообщение attempt to index a nil value - правильно ли это идеологически? Разве не правильно просто возвращать nil?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaMacro — Lua как язык макросов

Post by Shmuel »

AleXH wrote: правильно ли это идеологически?
Правильно.
Но если хочется, чтобы возвращался nil, вставьте в начало _macroinit.lua debug.setmetatable(nil,{__index={}}), и будет вам счастье.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

Хотелось бы понять логику этого "Правильно". Имхо с пользовательской точки зрения, если не выделено ни одного файла, то возвращение в lua nil для имени файла выглядит логичным. Разве в Lua возвращение nil для неопределённых значений не есть "закон"?
Last edited by AleXH on Sat 27 Dec, 2014 12:41, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaMacro — Lua как язык макросов

Post by zg »

если не выделено ни одного файла, возвращение для item nil выглядит логичным.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaMacro — Lua как язык макросов

Post by Shmuel »

AleXH wrote: Хотелось бы понять логику этого "Правильно"
Учите Lua. Да, именно Lua, так как плагин LuaMacro не имеет никакого отношения к выдаче ошибки при индексации величины nil.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

Т.е. в ближайших версиях FAR на возвращение nil для item можно рассчитывать, или нет?
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaMacro — Lua как язык макросов

Post by zg »

AleXH wrote:Т.е. в ближайших версиях FAR на возвращение nil для item можно рассчитывать, или нет?
так оно и возвращается. и всегда возвращалось.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

zg, если на панели выделено N файлов, то fn=panel.GetSelectedPanelItem(nil,0/1,N+1).FileName вызовет сообщение об ошибке и выполнение макроса прервётся. Собственно из этого и родился вопрос - а зачем такие зигзаги? Почему просто не вернуть nil? И, конечно, хочется чтобы это было зафиксировано официально - не править же каждую ночнушку. Если же зигзаг по каким-то причинам необходим, то хотелось бы знать по каким, вот собственно и всё...
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaMacro — Lua как язык макросов

Post by zg »

последний раз. panel.GetSelectedPanelItem(nil,0/1,N+1) возвращает nil. то что вы потом пытаетесь этот nil индексировать и получаете ошибку — это ваши личные половые трудности. и с этим вам точно не сюда.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

Всё равно как-то не логично - если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil? Зачем предварительно перед обращением к ней проверять существует ли она? Почему не работать по возвращённому результату? - Таков Lua?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaMacro — Lua как язык макросов

Post by Shmuel »

AleXH wrote: если я обращаюсь к таблице X и она не существует =nil, то почему в ответ на X.y не ответить nil?
Ну и заодно уже, почему бы при вызове несуществующей функции не вернуть nil? Почему бы при выполнении выражения 5+nil не вернуть 5? И т.д. и т.п.

Вообще-то меня уже начали доставать вопросы некоторых, не изучающих документацию. Да ещё и не желающих осмыслить ответы, которые им дают.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

LuaMacro — Lua как язык макросов

Post by Aidar »

Просто используйте конструкцию

Code: Select all

fn=(panel.GetSelectedPanelItem(nil,0/1,N+1) or {}).FileName
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LuaMacro — Lua как язык макросов

Post by AleXH »

Shmuel, Если нет желания или настроения, то отвечать однозначно не стоит - вам за это никто не платит, не надо воспринимать это как работу, иначе хобби превратится в тягость, а такого допускать нельзя.
Aidar, кстати да, часто применяю такой метод с переменными. За подсказку спасибо.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaMacro — Lua как язык макросов

Post by Shmuel »

AleXH wrote:Shmuel, Если нет желания или настроения, то отвечать однозначно не стоит - вам за это никто не платит, не надо воспринимать это как работу, иначе хобби превратится в тягость, а такого допускать нельзя.
В подобных советах никак не нуждаюсь, тем более после ваших сегодняшних постов в форуме.
Post Reply

Return to “Нужна помощь”