_macroinit.lua vs RunAfterFARStart
_macroinit.lua vs RunAfterFARStart
Во многих примерах, публикуемых на этом форуме я часто вижу, что вместо того чтобы вызвать какую нибудь функцию из Lua файла, который находится в каталоге scripts, оформляется специальный макрос с флажком RunAfterFARStart. Зачем? В чем преимущество вызова функции из макроса? Пример: http://forum.farmanager.com/viewtopic.p ... 55#p119955, в EnablePrivileges.lua вместо вызова EnablePrivileges{"SeBackupPrivilege","SeRestorePrivilege"} делается специальный макрос в котором ничего кроме вызова этой функции.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
_macroinit.lua исполняется при каждой загрузке и перезагрузке макросов.
Макросы с флагом RunAfterFARStart исполняются только при старте Far.
(Скрипт, на который вы ссылаетесь, я не смотрел, может быть автор разъяснит).
Макросы с флагом RunAfterFARStart исполняются только при старте Far.
(Скрипт, на который вы ссылаетесь, я не смотрел, может быть автор разъяснит).
_macroinit.lua vs RunAfterFARStart
Вот Ваш пример http://forum.farmanager.com/viewtopic.p ... 95#p121795. Вызов функции win.SetEnv при lm:load может чему-то помешать?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
Этот вызов, допустим, ничему бы не помешал, но зачем делать лишние телодвижения, если достаточно установить переменную окружения один раз при старте Far.
_macroinit.lua vs RunAfterFARStart
Вызов функции написать проще, чем макрос. Я сейчас посмотрел несколько Ваших примеров и негде не увидел вызов функции вне макроса. Всегда для вызова функции вне макроса Вы оформляете макрос с RunAfterFARStart. Почему?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
Ну вроде я всё уже объяснил выше, не буду повторяться.
Никто не запрещает вызывать любые функции из любого места - вы не обязаны делать как кто-то другой.
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
_macroinit.lua vs RunAfterFARStart
Данный макрос действительно достаточно выполнить однократно.Shmuel wrote:Макросы с флагом RunAfterFARStart исполняются только при старте Far.
(Скрипт, на который вы ссылаетесь, я не смотрел, может быть автор разъяснит).
С другой стороны, накладные расходы тут не велики, и без RunAfterFARStart можно обойтись.
Но в некоторых случаях RunAfterFARStart предпочтительнее, например при добавлении чего-либо к глобальных переменных, таких как package.path.
Хотя нет, в данном случае лучше воспользоваться другими техниками, т.к. при RunAfterFARStart код выполнится слишком поздно (после загрузки всех макрофайлов)
Ещё одна потенциально возможная причина использования макроса вместо простого вызова - это необходимость преодоления
Ограничений в использовании некоторых функций (см. мануал)
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
Сейчас проверил: несмотря на публикацию в форуме макросов с флагом RunAfterFARStart, на моей системе ни одного такого нет. Как видно пока не понадобилось. (А _macroinit.lua у меня пустой).
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
_macroinit.lua vs RunAfterFARStart
Отмечу, что любой файл в scripts исполняется при каждой перезагрузке. Особенность _macroinit.lua лишь в том, что он исполняется до всех остальных.
Изначальный вопрос, в заголовке темы, некорректен, не надо противопоставлять разнородные вещи.
Т.е. альтернатива на самом деле состоит в том, оборачивать ли какой-то код макросом, или выполнять прямо в теле скрипта (который может быть любым lua-файлом, а не только _macroinit.lua)
P.S.
Ответ разумеется адресован не автору макросистемы фара, а gotar, и другим неопытным пользователям
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
Следует уточнить, что автором макросистемы Far я не являюсь, я только прикручивал к ней Lua.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
_macroinit.lua vs RunAfterFARStart
Кстати, логично было бы сделать что-то типа _runafterfarstart.lua подобно _macroinit.lua (а RunAfterFARStart объявить пережитком прошлого )
Разум когда-нибудь победит.
- HaRT
- Moderator
- Posts: 10867
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
_macroinit.lua vs RunAfterFARStart
Возможно, зато получается один файл с гарантированной последовательностью исполнения кода.
В случае с несколькими макросами для
RunAfretFARStart
порядок их исполненияне гарантирован, или как минимум, не очевиден.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
_macroinit.lua vs RunAfterFARStart
Не создавайте больше одного макроса с флагом
RunAfterFARStart
и поместите в него всё, что хотели поместить в этот воображаемый файл.