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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2008, 14:57   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Доступ к параметру по его имени.
Допустим, параметры функции - 3 переменных одного типа(по определённым причинам это не может быть массив). Так же, обращаться к каждому из них отдельно не имеет смысла(ведь их, например, может быть не 3, а 10). Допустим, имя каждого параметра - 'param'+целочисленный индекс.

Хотелось бы написать что-то типа:

X++:
for(ind=1,ind<=3,ind++)somefunction(VarName2Var('param'+int2str(ind)));
Разумеется, функции VarName2Var не существует(увы, есть только var2str, но не обратно ), собственно в этом-то и проблема. Буду очень благодарен, если кто-то подскажет решение.

З.Ы Если интересно, почему в данном случае не подходит массив, как контейнер однотипных обьектов, можно глянуть тут: Значение по умолчанию параметра типа EDT c array elements либо просто массива
Возможно, кто-то решит изначальную проблему и тогда не прийдёться выдумывать ничего с несколькими параметрами, а просто юзать массив.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 20.02.2008 в 15:05.
Старый 20.02.2008, 15:24   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
когда число параметров заранее не известно лучше в качестве параметра использовать контейнер
Старый 20.02.2008, 15:27   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
X++:
void myMethod(container _params)
{;
    for(ind=1;ind<=conLen(_params); ind++)
    { 
       currParam = conPeek( _params, ind );
    }
}
Старый 20.02.2008, 15:35   #4  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от ice Посмотреть сообщение
когда число параметров заранее не известно лучше в качестве параметра использовать контейнер
Это логично. Но в данном случае количество параметров известно. А сказал я, что их может быть и 10 для того, что бы обобщить и систематизировать проблему, а так же обьяснить, почему не подходит вызов функци SomeFunc с каждым параметром отдельно в отдельном стейтменте.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 15:38   #5  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Gustav Посмотреть сообщение
X++:
void myMethod(container _params)
{;
    for(ind=1;ind<=conLen(_params); ind++)
    { 
       currParam = conPeek( _params, ind );
    }
}
Спасибо, но контейнер мне не подходит, иначе бы сам написал. Дело в том, что параметров должно быть чёткое количество. Конечно никто не мешает делать проверку внутри, но метод получиццо неюзабельный, то есть для конечного пользователя не будет очевидным сколько параметров должен метод принимать при вызове, если конечно не посмотрит его реализацию.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 15:39   #6  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Количество параметров ф-и можно через MethodInfo (3ка) или DictMethod (4ка) узнать.
А чего хотим добиться такими манипуляциями?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 20.02.2008, 15:53   #7  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Копайте дальше, пока не поймете, что объяснение

Цитата:
Сообщение от HorrR Посмотреть сообщение
Так же, обращаться к каждому из них отдельно не имеет смысла(ведь их, например, может быть не 3, а 10).
как минимум, не адекватно.
Старый 20.02.2008, 15:53   #8  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Количество параметров ф-и можно через MethodInfo (3ка) или DictMethod (4ка) узнать.
Я не о том! Я о том, что нужно, что б в самом эдиторе компиль ругался на попытку вызвать этот метод скажем с 4мя, а не с 3мя параметрами(само собой, что в хинте по методу тоже должно отображаться нужное количество параметров), что в случае использования контейнера нереально. А количество параметров, если уж юзать контейнер, можно и без этого метода реализовать просто проверивь длину контейнера.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 15:58   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от mau Посмотреть сообщение
Копайте дальше, пока не поймете, что объяснение



как минимум, не адекватно.
Что именно? Обьяснение тут элементарное, как я уже говорил, пример данный привел, что бы продемонстрировать, что может возникнуть задача того же типа, но с использованием 10ти параметров. И тогда вот такая штука:

SomeFunc(param1);
SomeFunc(param2);
SomeFunc(param3);
SomeFunc(param4);
SomeFunc(param5);
.............................

Будет явно не рациональной. А отдельно взятый метод должен иметь конкретное количество параметров. Просто нужен общий подход, который можно реализовать, как мне кажется, исключительно преобразованием имени параметра в параметр.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 16:11   #10  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Неадекватно будет делать такой парм метод. Я имею ввиду парм метод с 2-10 параметрами.
Я ведь правильно понимаю - что вы хотите автоматом генерить такой парм метод?

Как правило параметр один. Больше - скорее исключение чем правило.

Подумайте, насколько будет удобно в дальнейшем модифицировать такой метод.
Цитата:
SomeFunc(param1);
SomeFunc(param2);
SomeFunc(param3);
SomeFunc(param4);
SomeFunc(param5);
ИМХО годится.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 20.02.2008, 16:18   #11  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Неадекватно будет делать такой парм метод. Я имею ввиду парм метод с 2-10 параметрами.
Я ведь правильно понимаю - что вы хотите автоматом генерить такой парм метод?

Как правило параметр один. Больше - скорее исключение чем правило.

Подумайте, насколько будет удобно в дальнейшем модифицировать такой метод.
ИМХО годится.
Да я абсолютно с вами согласен, но возникли проблемы при работе именно с инициализацией параметра массивного типа. Ещё конечно попробую сделать инициализацию, как подсказал товарищ mau, а если не получится, так наверное подзабью и действительно буду линейно работать с каждым отдельным параметром, в конце-концов метод всё-равно генериццо автоматически.
__________________
Axapta has seduced me deadly!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
документооборот и доступ к файлам ivas DAX: Программирование 34 18.05.2012 11:00
Как дать доступ к Аксапте внешним пользователям? mazzy DAX: Администрирование 43 29.08.2008 15:46
Проблема с запуском business connector'a через удал доступ yooshi DAX: Программирование 1 07.11.2005 08:56
Разрешение на доступ к базе данных nicko DAX: Администрирование 3 18.05.2004 18:49
Доступ к контролам Кирилл DAX: Программирование 3 28.01.2004 13:27

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

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

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