Как передать в скрипт его FullPath

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by John Doe »

Можно ли в макросе как-то получить путь к файлу, из которого он загружается?
Shmuel
Posts: 6813
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

John Doe wrote:Можно ли в макросе как-то получить путь к файлу, из которого он загружен?
Он сохраняется во внутренней таблице макроса, но пока нигде не используется, и доступа пока нет. Вообще, запланировано кое-что в этом направлении, но ... всему своё время.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by John Doe »

Собственно в данном случае макроса нет.
Есть lua файл, который лежит в scripts и исполняется при загрузке макросов.
Вот в нём и возникла потребность узнать путь самого файла.
Shmuel
Posts: 6813
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

Боюсь, что на данный момент - никак.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by John Doe »

Я почему-то надеялся вычислить путь по arg[0].
Ну ничего, не критично. Может когда-нибудь.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Как передать в скрипт его FullPath

Post by Smitis »

John Doe wrote:Можно ли в макросе как-то получить путь к файлу, из которого он загружается?
Ответ был нет. Однако потребность в этом понемногу назревает (если к lua прилагаются другие файлы, которые хочется положить в ту же папку). В то же время при загрузке макроса через loadfile известен его FullPath. Может быть помещать его куда-нибудь перед загрузкой, например в mf.FullPath? Добавить одну строчку в utils.lua. Тогда можно было бы сохранить его в локальных переменных и проблема бы отпала. Возможно есть более лучший способ.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

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

Post by John Doe »

Другой вариант - передавать путь к файлу как параметр функции action.
И потребность есть не только в пути, но и в разной другой информации, надо хорошенько подумать как это всё увязать.
На всё отдельных параметров конечно не напасёшься, поэтому это должна быть таблица.

А если смотреть ещё глобальнее, то хотелось бы иметь доступ к информации не только текущего, но и вообще всех загруженных.
В частности, это позволило бы менять их на лету.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Но если передавать в качестве параметра action - это надо где-то хранить (усложнение, которое может быть и не будет реализованно). И в момент загрузки этой информации не будет.
А вот даже такое простое решение в utils.lua
  1. function (FindData, FullPath)
  2.  
  3.           mf.FullPath = FullPath
  4.  
  5.           local f, msg = loadfile(FullPath)
Позволит в модуле поставить local fullpath=mf.FullPath и использовать и в момент загрузки и при вызове макроса.
Может быть mf не самое лучшее место. И после загрузки всех модулей надо переменную обнулять/удалять как потерявшую актуальность. Но тем не менее, вариант самый простой.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

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

Post by John Doe »

Smitis wrote:Но если передавать в качестве параметра action - это надо где-то хранить (усложнение, которое может быть и не будет реализованно).
И сейчас много чего хранится.
Smitis wrote:И в момент загрузки этой информации не будет.
Т.е. вам это нужно за пределами action.
В этом случае можно было бы рассматривать путь как нулевой параметр командной строки.
Типа ({...})[0]
Нет, так не работает, можно только arg[0].
(Интересно как с этим работают в Lua 5.2, где нет "arg")
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

John Doe wrote:Т.е. вам это нужно за пределами action.
В этом случае можно было бы рассматривать путь как нулевой параметр командной строки.
Типа ({...})[0]
Нет, так не работает, можно только arg[0].
(Интересно как с этим работают в Lua 5.2, где нет "arg")
Я бы сказал - и за пределами action. А получив там, я с могу использовать и в action.
arg[0] тоже вариант, но как туда передать?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

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

Post by John Doe »

Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

John Doe wrote:Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
Разве loadfile, через который загружаются файлы, поддерживают передачу параметров? В utils.lua это строка "local f, msg = loadfile(FullPath)" Куда там параметры писать?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

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

Post by John Doe »

Smitis wrote:
John Doe wrote:Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
Разве loadfile, через который загружаются файлы, поддерживают передачу параметров? В utils.lua это строка "local f, msg = loadfile(FullPath)" Куда там параметры писать?
Не loadfile, а созданная им функция-загрузчик.
f(par1,par2,par3)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Тфу-ты, не в ту сторону меня понесло. Всё проще.
Вызов в utils.lua делается так "local ok, msg = pcall(f,FullPath)" и получаем первым параметром local FullPath=select(1,...)
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13792
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 424 times
Contact:

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

Post by John Doe »

http://www.lua.org/manual/5.1/manual.html#pdf-select

Code: Select all

If index is a number, returns all arguments after argument number index. Otherwise, index must be the string "#", and select returns the total number of extra arguments it received.
Перевожу: использование select для получения первого параметра лишено смысла.
Достаточно local FullPath = ...
Post Reply

Return to “Обсуждение макросов”