03.03.2005, 17:54 | #1 |
Участник
|
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('Все в порядке'); } |
|
03.03.2005, 18:19 | #2 |
Участник
|
Надо в функции getPrice объявить переменную ret типа real и возвращать ее.
PHP код:
|
|
03.03.2005, 18:28 | #3 |
Участник
|
Цитата:
Изначально опубликовано Hezl
Надо в функции getPrice объявить переменную ret типа real и возвращать ее. PHP код:
Результат функции объявлен как real но тем не менее может возвращать значения отличные от real типа, что нехорошо. Для решения проблемы можно просто возвращать не 0 а 0.0 о чем сказано в комментарии. |
|