|
![]() |
#1 |
Участник
|
Всем огромное спасибо. Подтвердили мои сомнения - архитектура передачи по значению не позволяет определять EDT передаваемых данных.
__________________
MS Dynamics AX 2009 Kernel 5.0.1600.4110 Application 5.0.1500.6491 |
|
![]() |
#2 |
Участник
|
Цитата:
Цитата:
X++: void foo(InventQty _qty) { // ... } void bar() { this.foo( 0 ); // здесь передается аргумент типа int, а не real! какие уж там тонкие отличия EDT... } По-моему, если нужно передавать не просто значение параметра, но и некую дополнительную семантику, связанную с этим значением, то проще и надежнее это реализовать за счет дополнительного параметра-enum'а. |
|
![]() |
#3 |
Участник
|
Цитата:
Спасибо за ссылки. Учту.
__________________
MS Dynamics AX 2009 Kernel 5.0.1600.4110 Application 5.0.1500.6491 |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() Более того, передаваться исходно могут вообще данные не того типа, какой вы ожидаете. Например:
X++: void foo(InventQty _qty) { // ... } void bar() { this.foo( 0 ); // здесь передается аргумент типа int, а не real! какие уж там тонкие отличия EDT... } В момент вызова функции foo() происходит преобразование из int в real и в параметре _qty хранится число в формате плавающей точки По ссылке, на мой взгляд, показан пример некорректного приведения типов int64->boolean (точнее int64->Enum. Хотя, для boolean выполняется дополнительное преобразование). Причем, при возврате из функции значения целочисленного типа, в том числе и литерала, приведение идет не к типу Boolean (Enum с Id=0xF000), а к некоему промежуточному енуму с Id = 0x0000 значения которого находятся в диапазоне 0..255. X++: Int i; boolean test() { return 0x10000000; } ; i = test(); info( strfmt('%1', i) );
__________________
Axapta v.3.0 sp5 kr2 |
|