18.02.2008, 18:57 | #1 |
Участник
|
Значение по умолчанию параметра типа EDT c array elements либо просто массива
Ребята, очередной вопрос из разряда: ламер хочет всё и сразу, поэтому не обессудте.
Во время написания парм метода для поля, которое базируется на EDT real типа с количеством ArrayElements равным двум, столкнулся с проблемой присвоения значений по умолчанию. 0, равно как и Null в качестве значения по умолчанию метод не принимает. Вспомнил, что есть известное EDT Dimensions с несколькими ArrayElements. От рациональности реализации парм-метода для поля, которое базируеццо на эту Идетешку просто офигел. При передаче параметра вызывается статический метод(на какой таблице уже не помню) и возвращает неинициализированную переменную этого же типа. Ну что-то на подобии Хедер парма: X++: public Dimension parmDimesion(Dimension _dim =SomeTable::emptyDim()) X++: public static Dimension emptyDim() { Dimension dim; ; return dim; } Так же усложняет ситуацию то, что параметр по умолчанию может быть лишь один, поэтому такой трюк не пройдёт: X++: public Dimension parmDimesion(real x=0, y=0) Конечно можно отказаться от использования массивного поля и разделить его релизацию в 2 отдельных поля, но это так же не выход. Может кто-нибудь из гуру сталкивался с такой проблемой, будет очень интересно узнать есть ли всё-таки для неё вразумительный солюшн. Зарание спасибо.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 18.02.2008 в 19:10. |
|
18.02.2008, 19:02 | #2 |
Участник
|
Про параметры - их может быть много
Для каждого надо указывать тип данных |
|
18.02.2008, 19:14 | #3 |
Участник
|
Нет слов, одни выражения. Вот это я тупица! Громадное спасибо)))
__________________
Axapta has seduced me deadly! |
|
20.02.2008, 15:33 | #4 |
Участник
|
Не понял, зачем городить огород с инициализацией в сигнатуре метода. Можно "старым дедовским способом":
X++: class MyClass
{
Dimension dim;
} X++: public Dimension parmDimesion(Dimension _dim = dim) |
|
20.02.2008, 15:48 | #5 |
Участник
|
А в данном примере вы параметр не в сигнатуре инициализируете?))) В любом случае, этот способ ничем не отличается от преведённого мной, за исключением того, что по всей видимости в вашем способе переменная обьявляется в декларейшене этого же класса, а в моём её значение возвращается статической функцией на родной таблице(как в общем-то это и реализовано в стандартном функционале). Так вот, повторюсь, не работает этот способ с ЭДТ, которые базируются на числовой тип, строковые - да, а числовые - нет. с Dimension трюк катит ибо этот EDT строкового типа.
__________________
Axapta has seduced me deadly! |
|
20.02.2008, 15:58 | #6 |
Участник
|
Проверил на Ax 3.0 SP3 KR1 - работает.
Параметр инициализируется не в сигнатуре, а при создании экземпляра класса. В сигнатуде он определяется по-умолчанию. Вещи разные, на мой взгляд. Если вы считаете ваш подход эстетически выигрышным - ок. Успехов. PS. Что такое "родная" табличка для EDT c arrayElements? ;-) |
|
20.02.2008, 16:05 | #7 |
Участник
|
Цитата:
Сообщение от mau
Проверил на Ax 3.0 SP3 KR1 - работает.
Параметр инициализируется не в сигнатуре, а при создании экземпляра класса. В сигнатуде он определяется по-умолчанию. Вещи разные, на мой взгляд. Если вы считаете ваш подход эстетически выигрышным - ок. Успехов. PS. Что такое "родная" табличка для EDT c arrayElements? ;-) Цитата:
Во время написания парм метода для поля, которое базируется на EDT real типа с количеством ArrayElements
__________________
Axapta has seduced me deadly! |
|
20.02.2008, 16:07 | #8 |
Участник
|
Я так понял, что автор имел ввиду ту табличку на которую настроены relations данного EDT.
__________________
Функциональное тестирование сайтов |
|
20.02.2008, 16:10 | #9 |
Участник
|
С типом real? В контексте аксапты, оригинально.
|
|
20.02.2008, 16:17 | #10 |
Участник
|
Вы бы огласили целиком решаемую задачу, не не отдельные технические трудности при её решении. Тогда ответ был бы получен быстрее и точнее. Судя по другой ветке, вы руководствуетесь шаблонами решения другого языка и , скорее всего, скриптового. Не все стандартные шаблоны других языков будут работать в аксапте. В аксапте есть шаблоны решения типовых задач. Называется Best practice.
Так что, пожалуйста, опишите задачу. |
|
20.02.2008, 16:22 | #11 |
Участник
|
Нда ужж. Чего-то и не подумал об этом :-)))
Цитата:
Ошибку есть. Содал новый EDT типа Real. Добавил в array к нему парочку элементов. На новой табличке написал статический метод(аля метод emptyDimension на табличке Dimensions),который возвращает пустой EDT. Создал джобик и попытался проинитить этим статическим методом переменную. Ругается на несовместимость типов
__________________
Функциональное тестирование сайтов |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
20.02.2008, 16:28 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: HorrR (1). |
20.02.2008, 16:33 | #13 |
Участник
|
Цитата:
Сообщение от Red Stranger
Нда ужж. Чего-то и не подумал об этом :-)))
Проверил на Ax 4.0 sp1 Ошибку есть. Содал новый EDT типа Real. Добавил в array к нему парочку элементов. На новой табличке написал статический метод(аля метод emptyDimension на табличке Dimensions),который возвращает пустой EDT. Создал джобик и попытался проинитить этим статическим методом переменную. Ругается на несовместимость типов
__________________
Axapta has seduced me deadly! |
|
20.02.2008, 18:20 | #14 |
Участник
|
Создал запрос - возможно, в след. версии исправят.
Но это очень незначительная фигня. |
|
20.02.2008, 18:31 | #15 |
Участник
|
А чем такой-то вариант не устраивает?
X++: public ReaArraylDemo parmReaArraylDemo(ReaArraylDemo _reaArraylDemo = _reaArraylDemo) { ; reaArraylDemo = _reaArraylDemo; return reaArraylDemo; } |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
20.02.2008, 19:15 | #16 |
Участник
|
Бгг, гениально просто!!!
__________________
Axapta has seduced me deadly! |
|
20.02.2008, 19:18 | #17 |
Участник
|
Благодарю, общественность тебя не забудет)
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 20.02.2008 в 19:21. |
|