Ликбез по 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: если использовать self вместо имени таблицы, то всё работает для локальных таблиц
Продемонстрируйте нам.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

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 »

Изменил первую строку на _G.country_t
Всё вроде работает.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Вопрос состоял в том,чтобы не использовать конкретное имя таблицы в функции, а заюзать некий аналог self, работающий с глобальными таблицами, потому как странно обращаться к таблице по внешнему имени в функции, принадлежащей этой же таблице.
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: странно обращаться к таблице по внешнему имени в функции, принадлежащей этой же таблице.
Функция не принадлежит таблице. Таблица ведь не объект.
AleXH wrote: Вопрос состоял в том
Это понятно. Обращайтесь на здоровье.
Или что у вас не работает?
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Заюзал замечательный инструмент замечательного товарища, такой как LuaExplorer, по enter на функции f ввожу , получаю .
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: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? И, конечно, хочется чтобы это было зафиксировано официально - не править же каждую ночнушку. Если же зигзаг по каким-то причинам необходим, то хотелось бы знать по каким, вот собственно и всё...
Post Reply

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