Вообще интересная ситуация.
Если поменять
Dimension value, result;
на явное объявление массива
str value[10], result[10];
то получается ошибка времени выполнения - Неверная операция над массивом данного типа - что как-бы намекает на некорректность кода.
Если же сменить тип данных со string на real (как нужно было в реальной задаче), то джоб выполняется без ошибок, но в результате выполнения нули, а на больших выборках - мусор. При этом аксапта ни на что не ругается
X++:
static void ArrayMapExample3(Args _args)
{
real value[3];
real result[3];
Map map;
MapEnumerator me;
int64 key;
;
map = new Map(Types::Int64, Types::Real);
key = 1; value[1] = 1.0; value[2] = 2.0; value[3] = 3.0;
map.insert(key, value);
key = 2; value[1] = 3.0; value[2] = 2.0; value[3] = 1.0;
map.insert(key, value);
key = 3; value[1] = 1.0; value[2] = 3.0; value[3] = 2.0;
map.insert(key, value);
me = map.getEnumerator();
while (me.moveNext())
{
key = me.currentKey();
result = me.currentValue();
info(strfmt('%1;%2;%3;%4', key, result[1], result[2], result[3]));
}
}
Получается, что в зависимости от типа данных массива система здесь ведёт себя по-разному.
Думаю свернуть свои эксперименты с массивами и использовать контейнер. Спасибо!