|
|
#1 |
|
MCP
|
Job - Интересное наблюдение
Добрый день!
Случайно заметил странное поведение. Создаем такой джоб: X++: static void testFunction(Args _args) { boolean check() { boolean ret = true; ; } ; if(check()) info(strfmt("true")); else info(strfmt("false")); } Если бы это был класс, и check() был бы отдельным булевским методом, не возвращающим значение - система всегда вылетала бы в отладчик с сообщением: "Функция никогда не возвращает значение" Понятно что это не по BestPractice, но я всегда думал что функции внутри методов обрабатываются также, как отдельные методы. Выходит что нет. Проверял на DAX 4.0 |
|
|
|
| За это сообщение автора поблагодарили: lev (2), S.Kuskov (3), JeS (1), Dark Light (1). | |
|
|
#2 |
|
Участник
|
в AX2009 тоже самое
|
|
|
|
|
#3 |
|
Участник
|
Занятно. В 5ке также. А если сделать так
X++: static void testFunction(Args _args) { str check() { } ; info(check()); } |
|
|
|
| За это сообщение автора поблагодарили: S.Kuskov (2), kornix (1). | |
|
|
#4 |
|
MCT
|
4.0.2501.116
Все компилится и запускается. а если подредактировать так X++: static void testFunction(Args _args) { boolean check() { boolean ret = true; return ret; } ; if(check()) info(strfmt("true")); else info(strfmt("false")); }
__________________
Axapta book for developer Последний раз редактировалось MikeR; 15.05.2012 в 10:49. |
|
|
|
| За это сообщение автора поблагодарили: S.Kuskov (0). | |
|
|
#5 |
|
MCP
|
Еще интересней:
X++: static void testFunction(Args _args) { boolean check() { ; return 3; } ; info(strfmt("%1", check())); } Каким образом логическая функция может вернуть что-то отличное от 0 или 1?
Последний раз редактировалось kornix; 15.05.2012 в 10:57. |
|
|
|
|
#6 |
|
Участник
|
в аксапте булевый тип - это enum, а enum в аксапте - это int. Воот
X++: print typeof(true); print typeof(boolean::true); pause; |
|
|
|
| За это сообщение автора поблагодарили: kornix (3). | |
|
|
#7 |
|
MCT
|
я бы даже так сказал. При преобразовании int в boolean. Все что не 0 true, 0 это false.
Это во многих языках так. PS Извиняюсь, что вмешался в процесс взаимоодобрения и воодушевления
__________________
Axapta book for developer |
|
|
|
|
#8 |
|
Ищущий знания...
|
Так про то и речь, что возврата в функции нет, а джоб все равно запускается и даже что то там работает, хоть и компилится с ошибкой
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#9 |
|
MCT
|
Цитата:
__________________
Axapta book for developer |
|
|
|
|
#10 |
|
MCP
|
Цитата:
в аксапте булевый тип - это enum, а enum в аксапте - это int
Но почему-то код ниже возвращает 182 ![]() X++: static void testFunction(Args _args) { boolean check() { ; return 54654654646; } ; info(strfmt("%1", check())); } |
|
|
|
|
#11 |
|
Участник
|
|
|
|
|
|
#12 |
|
Участник
|
X++: info(int2str(54654654646 mod 256));X++: info(int2str(54654654646 & 255)); Последний раз редактировалось S.Kuskov; 15.05.2012 в 11:22. |
|
|
|
|
#13 |
|
Участник
|
Интересно что явное присваивание переменной типизирует значение корректно, в отличии от просто возврата из функции (причём не только из локальной).
X++: boolean b;
boolean check()
{
return 3;
}
;
b = check();
info(strfmt("%1", check()));
info(strfmt("%1", b)); |
|
|
|
|
#14 |
|
Участник
|
А в 3-ке еще можно было при вызове локального метода обязательные значения параметров не указывать и прокатывало
|
|
|
|
|
|