В связи с переездом макросов из macros.db в файлы произошли определённые изменения в поведении переменных. Пока документация отстаёт, опишу вкратце здесь, затем отвечу на вопросы, если будут.
Изменения примерно таковы:
все "временные" переменные (то-есть глобальные в пределах файла) и все upvalues (то-есть локальные расположенные снаружи и выше тела функции) сохраняют свои значения между запусками макросов до очередного lm:load / far.MacroLoadAll / конца сессии Фара. Это поведение не полностью совместимо с прежним, и может привести к неработоспособности некоторых существующих макросов.
"Истинные" глобальные переменные (типа _G.foo) сейчас нужны только для обмена информацией между макросами из разных файлов.
Изменение поведения переменных в Фар 3001+
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Изменение поведения переменных в Фар 3001+
А как это соотносится с макросами, запускаемыми по Macro:Post ? Для них все по старому, или есть какие-нибудь нюансы?
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Re: Изменение поведения переменных в Фар 3001+
Как быть с константами, которые я хочу использовать в разных макросах?
Завести для них отдельный файл, и объявить все как _G.* ?
Завести для них отдельный файл, и объявить все как _G.* ?
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: Изменение поведения переменных в Фар 3001+
Делать константы глобальными или нет - дело вкуса. Глобальные лучше выглядят для чтения, так как _G. можно опускать. Но с другой стороны - "засоряется" глобальное пространство.John Doe wrote:Как быть с константами, которые я хочу использовать в разных макросах?
Завести для них отдельный файл, и объявить все как _G.* ?
Вижу два варианта:
1. Объявить константы в автостартующем макросе (либо сделав глобальными, либо поместив в какую-то глобальную таблицу, например, Constants).
2. Поместить константы в модуль. Опять-таки, либо сделав глобальными, либо поместив в таблицу.
EDIT:
Мне напомнили, что сейчас действительно автостартующие макросы имеют мало смысла. Поэтому вариант 1 трансформируется просто в файл-скрипт, в котором объявлены константы.
Re: Изменение поведения переменных в Фар 3001+
Зачем вообще нужны автостартующие макросы? Вроде бы все действия которые есть в файлах \Macros\scripts выполняются в момент загрузки макросов при старте Фара. Почему эти действия обязательно оформлять в виде макроса?
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: Изменение поведения переменных в Фар 3001+
Не обязательно. Но ещё не так давно во время загрузки макрофайлы не имели доступа к глобальным переменным, тогда разница существовала.gotar wrote:Зачем вообще нужны автостартующие макросы? Вроде бы все действия которые есть в файлах \Macros\scripts выполняются в момент загрузки макросов при старте Фара. Почему эти действия обязательно оформлять в виде макроса?
Re: Изменение поведения переменных в Фар 3001+
Мне кажется, что будет лучше если каждый разработчик будет помещать константы переменные и функции работающие с этими переменными в свою собственную таблицу, ссылку на которую занести в таблицу _G, а не все будут пихать в одну таблицу constant.либо поместив в какую-sто глобальную таблицу, например, Constant