AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.03.2005, 17:54   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 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('Все в порядке');

}
Старый 03.03.2005, 18:19   #2  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
Надо в функции getPrice объявить переменную ret типа real и возвращать ее.
PHP код:
real getPricereal _costValuereal _qty)
{
    
real ret;
    ;
    if (
_qty !=0)
        
ret _costValue _qty;

    return 
ret;

Старый 03.03.2005, 18:28   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Изначально опубликовано Hezl
Надо в функции getPrice объявить переменную ret типа real и возвращать ее.
PHP код:
real getPricereal _costValuereal _qty)
{
    
real ret;
    ;
    if (
_qty !=0)
        
ret _costValue _qty;

    return 
ret;

Это конечно правильно, но я имел в виду другое.

Результат функции объявлен как real но тем не менее может возвращать значения отличные от real типа, что нехорошо.

Для решения проблемы можно просто возвращать не 0 а 0.0 о чем сказано в комментарии.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при вызове COM-метода koraman DAX: Программирование 8 23.10.2014 09:57
Проблема вызова метода доступа (Enum'ы!) Zoe DAX: Программирование 4 14.04.2008 23:48
Тип счета в плане счетов Axapta Vansoft DAX: Программирование 0 18.05.2004 17:20
Никак не могу вьехать, для чего нужны тип счета и тип разноски maloy DAX: Функционал 5 28.03.2004 17:18
Тип связи Андре DAX: Программирование 9 25.04.2002 20:20

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:15.