Описание
В стековом режиме второй аргумент Новый(ИмяТипа, МассивПараметров) — это массив
параметров конструктора, и он разворачивается. В #native тот же массив передаётся
конструктору как одно значение.
Расхождение семантики, без ошибки компиляции.
Воспроизведение
Один и тот же код в двух модулях, различаются ровно директивой #native.
Классы/СтековыйКласс.os:
Функция НовыйСПараметрами(ИмяТипа, Параметры) Экспорт
Возврат Новый(Строка(ИмяТипа), Параметры);
КонецФункции
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Классы/НативныйКласс.os:
#native
Функция НовыйСПараметрами(ИмяТипа, Параметры) Экспорт
Возврат Новый(Строка(ИмяТипа), Параметры);
КонецФункции
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Сценарий запуска:
#Использовать "."
Парам = Новый Массив();
Парам.Добавить(3);
Стек = Новый СтековыйКласс();
Сообщить("stack: количество = " + Стек.НовыйСПараметрами("Массив", Парам).Количество());
Нат = Новый НативныйКласс();
Попытка
Сообщить("native: количество = " + Нат.НовыйСПараметрами("Массив", Парам).Количество());
Исключение
Сообщить("native УПАЛ: " + ОписаниеОшибки());
КонецПопытки;
Фактическое поведение
stack: количество = 3
native УПАЛ: OneScript.StandardLibrary.Collections.ArrayImpl: Массив Conversion to type 'Number' is not supported
То есть в native конструктору Массив достался сам массив параметров вместо числа 3.
Ожидаемое поведение
stack: количество = 3
native: количество = 3
Окружение
Воспроизводится одинаково на:
- 2.2.0, linux-x64
- 2.3.0-dev+6 (ночная сборка), linux-x64
Влияние
Обхода нет. Это базовая операция для любой фабрики объектов, создающей экземпляры
по имени типа с заранее собранным списком параметров.
В autumn на этом застревает модуль
фабричных методов — точка, где создаются все компоненты фреймворка.
Описание
В стековом режиме второй аргумент
Новый(ИмяТипа, МассивПараметров)— это массивпараметров конструктора, и он разворачивается. В
#nativeтот же массив передаётсяконструктору как одно значение.
Расхождение семантики, без ошибки компиляции.
Воспроизведение
Один и тот же код в двух модулях, различаются ровно директивой
#native.Классы/СтековыйКласс.os:Классы/НативныйКласс.os:Сценарий запуска:
Фактическое поведение
То есть в native конструктору
Массивдостался сам массив параметров вместо числа 3.Ожидаемое поведение
Окружение
Воспроизводится одинаково на:
Влияние
Обхода нет. Это базовая операция для любой фабрики объектов, создающей экземпляры
по имени типа с заранее собранным списком параметров.
В autumn на этом застревает модуль
фабричных методов — точка, где создаются все компоненты фреймворка.