Изменение поведения переменных в Фар 3001+

Здесь обсуждается всё, что касается макросов.
Post Reply
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Изменение поведения переменных в Фар 3001+

Post by Shmuel »

В связи с переездом макросов из macros.db в файлы произошли определённые изменения в поведении переменных. Пока документация отстаёт, опишу вкратце здесь, затем отвечу на вопросы, если будут.

Изменения примерно таковы:
все "временные" переменные (то-есть глобальные в пределах файла) и все upvalues (то-есть локальные расположенные снаружи и выше тела функции) сохраняют свои значения между запусками макросов до очередного lm:load / far.MacroLoadAll / конца сессии Фара. Это поведение не полностью совместимо с прежним, и может привести к неработоспособности некоторых существующих макросов.

"Истинные" глобальные переменные (типа _G.foo) сейчас нужны только для обмена информацией между макросами из разных файлов.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Изменение поведения переменных в Фар 3001+

Post by Max Rusov »

А как это соотносится с макросами, запускаемыми по Macro:Post ? Для них все по старому, или есть какие-нибудь нюансы?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Изменение поведения переменных в Фар 3001+

Post by Shmuel »

Для них всё по-старому.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Изменение поведения переменных в Фар 3001+

Post by John Doe »

Как быть с константами, которые я хочу использовать в разных макросах?
Завести для них отдельный файл, и объявить все как _G.* ?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Изменение поведения переменных в Фар 3001+

Post by Shmuel »

John Doe wrote:Как быть с константами, которые я хочу использовать в разных макросах?
Завести для них отдельный файл, и объявить все как _G.* ?
Делать константы глобальными или нет - дело вкуса. Глобальные лучше выглядят для чтения, так как _G. можно опускать. Но с другой стороны - "засоряется" глобальное пространство.

Вижу два варианта:
1. Объявить константы в автостартующем макросе (либо сделав глобальными, либо поместив в какую-то глобальную таблицу, например, Constants).
2. Поместить константы в модуль. Опять-таки, либо сделав глобальными, либо поместив в таблицу.

EDIT:
Мне напомнили, что сейчас действительно автостартующие макросы имеют мало смысла. Поэтому вариант 1 трансформируется просто в файл-скрипт, в котором объявлены константы.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Изменение поведения переменных в Фар 3001+

Post by gotar »

Зачем вообще нужны автостартующие макросы? Вроде бы все действия которые есть в файлах \Macros\scripts выполняются в момент загрузки макросов при старте Фара. Почему эти действия обязательно оформлять в виде макроса?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Изменение поведения переменных в Фар 3001+

Post by Shmuel »

gotar wrote:Зачем вообще нужны автостартующие макросы? Вроде бы все действия которые есть в файлах \Macros\scripts выполняются в момент загрузки макросов при старте Фара. Почему эти действия обязательно оформлять в виде макроса?
Не обязательно. Но ещё не так давно во время загрузки макрофайлы не имели доступа к глобальным переменным, тогда разница существовала.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Изменение поведения переменных в Фар 3001+

Post by gotar »

либо поместив в какую-sто глобальную таблицу, например, Constant
Мне кажется, что будет лучше если каждый разработчик будет помещать константы переменные и функции работающие с этими переменными в свою собственную таблицу, ссылку на которую занести в таблицу _G, а не все будут пихать в одну таблицу constant.
Post Reply

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