Произвольные аргументы конструктора
Иногда понимание того, что же еще добавить в поделку, приходит в самый последний момент. Буквально после запуска приложения, кодом, на основании какой-то хитрой логики. Да, можно сделать хитрый &Дуб
, передать в него в виде желудя расчетчик этой самой бизнес-логики, который выдаст нужную циферку, но порой хочется просто передать 42
в конструктор желудя.
Для таких случаев в ОСени есть аннотация &Блестяшка
.
&Желудь
Процедура ПриСозданииОбъекта(
&Пластилин ПроверяторВерсий
&Блестяшка ФормулировкаВопроса
)
КонецПроцедуры
Как ее использовать? Двумя способами. Первый - это передать все параметры конструктора в виде массива в метод Поделка.НайтиЖелудь()
:
ПараметрыКонструктора = Новый Массив;
ПараметрыКонструктора.Добавить(Поделка.НайтиЖелудь("ПроверяторВерсий"));
ПараметрыКонструктора.Добавить("Главный вопрос жизни, вселенной и всего такого");
ЛенивыйЖелудь = Поделка.НайтиЖелудь(
"ЛенивыйЖелудь",
ПараметрыКонструктора
);
Второй - передать только блестяшки. А весь &Пластилин
и &Детальки
ОСень подставит сама:
ПараметрыКонструктора = Новый Массив;
ПараметрыКонструктора.Добавить("Главный вопрос жизни, вселенной и всего такого");
ЛенивыйЖелудь = Поделка.НайтиЖелудь(
"ЛенивыйЖелудь",
ПараметрыКонструктора
);
&Блестяшки
можно внедрять только в конструктор желудя. Внедрение в поля и методы жёлудя не поддерживается. Однако вы можете объявить &Дуб
и &Завязь
, куда &Блестяшку
передать таки можно:
&Дуб
Процедура ПриСозданииОбъекта()
КонецПроцедуры
&Завязь
Процедура ЛенивыйЖелудь(
&Пластилин ПроверяторВерсий
&Блестяшка ФормулировкаВопроса
)
ЛенивыйЖелудь = Новый ЛенивыйЖелудь(ПроверяторВерсий);
ЛенивыйЖелудь.ЗадатьВопрос(ФормулировкаВопроса);
Возврат ЛенивыйЖелудь;
КонецПроцедуры
И в заключение темы, ЛенивыйЖелудь
(не важно, созданный конструктором или &Завязью
) можно внедрить в другой желудь, воспользовавшись повторяемым параметром Блестяшка
в аннотации &Пластилин
:
&Пластилин(Блестяшка = "Шестью девять?")
Перем ЛенивыйЖелудь;
&Желудь
Процедура ПриСозданииОбъекта()
КонецПроцедуры
При поиске любителя ленивых желудей в него будет прилеплен ЛенивыйЖелудь
с вопросом Шестью девять?
.
Повторяемые параметры аннотаций позволяют указывать один и тот же параметр аннотации несколько раз с разными значениями. Например, если у желудя в конструктор принимается несколько блестяшек, то и внедрить такой желудь можно указав несколько блестяшек в аннотации &Пластилин
:
&Пластилин(Блестяшка = "Первое значение", Блестяшка = "Второе значение")
Перем ЖелудьСДвумяБлестяшками;