21.12.2004, 17:09 | #1 |
Участник
|
Anytype. Повторное присваивание
Пусть внутри метода объявлена переменная типа anytype,
и необходимо изменять ее значение несколько раз, в том числе в цикле. Проблема: новые значения эти могут быть разных типов (они берутся из полей внешнего источника данных ADO), но Axapta позволяет задать тип значения anytype -переменной только в момент инициализации, т.е. первого присваивания. При последующих присваиваниях Axapta неявно преобразует новое значение к тому типу, который был "закреплен" за переменной. Очень неохота изворачиваться и использовать контейнер или класс оболочку - в циклах будет теряться производительность. Подскажите, plz, стандартный способ, как сбросить "закрепленный" тип у переменной anytype ??? |
|
21.12.2004, 18:08 | #2 |
Участник
|
Честно создал Job:
{ anytype a; ; a = "5"; info(a); a= 5; info(int2str(a)); a= 5*23; info(int2str(a)); a = "5"; info(a); a = today(); info(date2str(a,123,2,2,2,2,2)); a = 2684.543; info(num2str(a,5,3,0,1)); } Вроде как работает... |
|
21.12.2004, 18:24 | #3 |
Участник
|
Я использовал контейнер в свое время
|
|
21.12.2004, 18:37 | #4 |
Участник
|
Ваша проблема заключается в том, что у Вас как слева так и справа от знака присваивания стоят пременные типа anytype.
Можно попробовать запихнуть значение поля в COMVariant. У класса CCADOField есть член field, в котором хранится COM-объект ADO::Field. Вызов field.value() возвратит значение в виде COMVariant. Как в дальнейшем обработать это значение - см. в методе value класса CCADOField. Чтобы получить COM-объект field у класса CCADOField можно создать свой метод, который бы возвращал объект field. |
|
21.12.2004, 20:51 | #5 |
Участник
|
2 hyphen:
Не-а, нечестно вы Job создали Попробуйте заменить первые 4 строки на: a= 5; info(int2str(a)); a = "ABCDEF"; info(a); тогда поймете в чем суть проблемы. |
|
22.12.2004, 10:02 | #6 |
Участник
|
PHP код:
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
22.12.2004, 10:52 | #7 |
Участник
|
Сбросить тип переменной anytype нельзя. Он определяется при первой инициализации переменной и сохраняется до ее кончины :-)
Поэтому я обычно создаю специальную функцию, в которой anytype инициализируется и обрабатывается. Типа: void showAnyType(anytype _y) { ; info(strfmt('%1', _y)); } showAnyType(12); showAnyType('sdgfsd'); |
|
24.12.2004, 11:50 | #8 |
Участник
|
всем спасибо, собственно так и пришлось сделать - написать класс оболочку.
2 belugin: Я написал, не зная еще про SysAnyType, свой класс -оболочку, в нем просто одна внутренняя переменная типа anytype и вроде все работает ... Вы случайно не знаете, зачем в классе SysAnyType нужен внутренний Map ? |
|
24.12.2004, 15:44 | #9 |
Участник
|
К сожалению, не знаю. Он вообще используется только в одном месте...
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Передача переменного числа параметров в метод | 16 | |||
Anytype (Баг или Фича) | 3 | |||
Anytype и его опознание | 7 | |||
Повторное использование номеров кассовых ордеров | 2 | |||
Мистика: anytype в Map | 3 |
|