Показать сообщение отдельно
Старый 03.03.2005, 17:54   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
X++ иногда не контролирует тип результата метода
Тип возвращаемого методом значения не приводится к объявленному типу.

Axapta 3.0 SP2

Пример :
Тип метода getPrice() объявлен как real,
а реально возвращается тип integer.

Видимо приведение типов происходит уже вне метода.

static void JobTestBugTypes()
{
Amount amount = 10;
Qty qty = 0;
Array sArray = new Array(Types::Real);
real r;
anytype any;
types tAny;
types tR;
real getPrice( real _costValue, real _qty)
{
if (_qty !=0)
return _costValue / _qty;
else
return 0; // глюки пропадут если здесь
// сразу поставить явно константу типа real
// например 0.0
}
;

r = getPrice(amount, qty);
tR = typeOf(r);
info(strFMT('r : Реально получили значение типа %1', tR));

any = getPrice(amount, qty);
tAny = typeOf(any);
info(strFMT('any : Реально получили значение типа %1', tAny));

sArray.value(3, getPrice(amount, qty) ); // здесь exception будет "Несовпадение типов"
sArray.value(3, any ); // и здесь был бы если бы дошли

info('Все в порядке');

}