_macroinit.lua vs RunAfterFARStart

Здесь обсуждается всё, что касается макросов.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

_macroinit.lua vs RunAfterFARStart

Post by gotar »

Во многих примерах, публикуемых на этом форуме я часто вижу, что вместо того чтобы вызвать какую нибудь функцию из Lua файла, который находится в каталоге scripts, оформляется специальный макрос с флажком RunAfterFARStart. Зачем? В чем преимущество вызова функции из макроса? Пример: http://forum.farmanager.com/viewtopic.p ... 55#p119955, в EnablePrivileges.lua вместо вызова EnablePrivileges{"SeBackupPrivilege","SeRestorePrivilege"} делается специальный макрос в котором ничего кроме вызова этой функции.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

_macroinit.lua исполняется при каждой загрузке и перезагрузке макросов.
Макросы с флагом RunAfterFARStart исполняются только при старте Far.
(Скрипт, на который вы ссылаетесь, я не смотрел, может быть автор разъяснит).
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

_macroinit.lua vs RunAfterFARStart

Post by gotar »

Вот Ваш пример http://forum.farmanager.com/viewtopic.p ... 95#p121795. Вызов функции win.SetEnv при lm:load может чему-то помешать?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

gotar wrote: Вызов функции win.SetEnv при lm:load может чему-то помешать?
Этот вызов, допустим, ничему бы не помешал, но зачем делать лишние телодвижения, если достаточно установить переменную окружения один раз при старте Far.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

_macroinit.lua vs RunAfterFARStart

Post by gotar »

Вызов функции написать проще, чем макрос. Я сейчас посмотрел несколько Ваших примеров и негде не увидел вызов функции вне макроса. Всегда для вызова функции вне макроса Вы оформляете макрос с RunAfterFARStart. Почему?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

gotar wrote: Всегда для вызова функции вне макроса Вы оформляете макрос с RunAfterFARStart. Почему?
Ну вроде я всё уже объяснил выше, не буду повторяться.
Никто не запрещает вызывать любые функции из любого места - вы не обязаны делать как кто-то другой.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

_macroinit.lua vs RunAfterFARStart

Post by John Doe »

Shmuel wrote:Макросы с флагом RunAfterFARStart исполняются только при старте Far.
(Скрипт, на который вы ссылаетесь, я не смотрел, может быть автор разъяснит).
Данный макрос действительно достаточно выполнить однократно.
С другой стороны, накладные расходы тут не велики, и без RunAfterFARStart можно обойтись.

Но в некоторых случаях RunAfterFARStart предпочтительнее, например при добавлении чего-либо к глобальных переменных, таких как package.path.
Хотя нет, в данном случае лучше воспользоваться другими техниками, т.к. при RunAfterFARStart код выполнится слишком поздно (после загрузки всех макрофайлов)

Ещё одна потенциально возможная причина использования макроса вместо простого вызова - это необходимость преодоления
Ограничений в использовании некоторых функций (см. мануал)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

Сейчас проверил: несмотря на публикацию в форуме макросов с флагом RunAfterFARStart, на моей системе ни одного такого нет. Как видно пока не понадобилось. (А _macroinit.lua у меня пустой).
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

_macroinit.lua vs RunAfterFARStart

Post by John Doe »

Shmuel wrote: _macroinit.lua исполняется при каждой загрузке и перезагрузке макросов.
Отмечу, что любой файл в scripts исполняется при каждой перезагрузке. Особенность _macroinit.lua лишь в том, что он исполняется до всех остальных.

Изначальный вопрос, в заголовке темы, некорректен, не надо противопоставлять разнородные вещи.
Т.е. альтернатива на самом деле состоит в том, оборачивать ли какой-то код макросом, или выполнять прямо в теле скрипта (который может быть любым lua-файлом, а не только _macroinit.lua)

P.S.
Ответ разумеется адресован не автору макросистемы фара, а gotar, и другим неопытным пользователям
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

John Doe wrote: Ответ разумеется адресован не автору макросистемы фара
Следует уточнить, что автором макросистемы Far я не являюсь, я только прикручивал к ней Lua. :)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

_macroinit.lua vs RunAfterFARStart

Post by Smitis »

Кстати, логично было бы сделать что-то типа _runafterfarstart.lua подобно _macroinit.lua (а RunAfterFARStart объявить пережитком прошлого :) )
Разум когда-нибудь победит.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

_macroinit.lua vs RunAfterFARStart

Post by HaRT »

Smitis wrote: что-то типа _runafterfarstart.lua
В Винде такие вещи традиционно называются RunOnce.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

_macroinit.lua vs RunAfterFARStart

Post by zg »

Smitis wrote:_runafterfarstart.lua
гибкость уменьшается, не?
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

_macroinit.lua vs RunAfterFARStart

Post by 2useven10 »

zg wrote: гибкость уменьшается, не?
Возможно, зато получается один файл с гарантированной последовательностью исполнения кода.
В случае с несколькими макросами для RunAfretFARStart порядок их исполнения
не гарантирован, или как минимум, не очевиден.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

_macroinit.lua vs RunAfterFARStart

Post by Shmuel »

2useven10 wrote: зато получается один файл с гарантированной последовательностью исполнения кода.
Не создавайте больше одного макроса с флагом RunAfterFARStart и поместите в него всё, что хотели поместить в этот воображаемый файл.
Post Reply

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