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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2013, 13:20   #1  
alex_zh is offline
alex_zh
Участник
 
8 / 10 (1) +
Регистрация: 02.07.2013
Функция внутри метода класса
Добрый день!
Есть метод уже существующего класса.
В методе объявлена функция.
Хочу добавить еще одну функцию. Вот пример:

X++:
#define.numberRow(18)
public void run()
{
    Name                        companyName, nameCustVend;
    str                         ss;

    // Это функция, которую я пытаюсь добавить
    Name getFactureNum()
    {
        Name    ret;
        // Здесь тоже будет некий функционал
        return ret;
    }
    ;

    // Это уже имеющаяся функция
    Name getDocument()
    {
        Name    ret;
        // Здесь некий функционал
        return ret;
    }
    ;

    // Здесь некие операторы метода, в частности вызывающие функцию getDocument()
}
Без функции getFactureNum() код прекрасно компилируется и работает.
Если я добавляю функцию getFactureNum(), то получаю ошибку "Переменная Name не была объявлена", которая указывает на строку с уже имевшейся ранее функцией getDocument().

В чем может быть проблема?
Внутри метода нельзя объявить более одной функции?

Спасибо.
Старый 02.07.2013, 13:27   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Точку с запятой уберите после первой функции.
X++:
#define.numberRow(18)
public void run()
{
    Name                        companyName, nameCustVend;
    str                         ss;

    // Это функция, которую я пытаюсь добавить
    Name getFactureNum()
    {
        Name    ret;
        // Здесь тоже будет некий функционал
        return ret;
    }
   ; <-----------   

    // Это уже имеющаяся функция
    Name getDocument()
    {
        Name    ret;
        // Здесь некий функционал
        return ret;
    }
    ;

    // Здесь некие операторы метода, в частности вызывающие функцию getDocument()
}
За это сообщение автора поблагодарили: alex_zh (1).
Старый 02.07.2013, 13:31   #3  
alex_zh is offline
alex_zh
Участник
 
8 / 10 (1) +
Регистрация: 02.07.2013
Спасибо :-) Все получилось!
Можно еще вопрос по синтаксису:
После функции getDocument() есть точка с запятой[;], а почему после предыдущей функции не нужно?
Особенности синтаксиса?
Старый 02.07.2013, 13:40   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
А почему не используете отдельные методы класса??? Они же как раз для этого и существуют!

Когда в одном методе класса куча подфункций (а по мне так хоть одна), такой код очень проблематично поддерживать...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 02.07.2013, 13:43   #5  
alex_zh is offline
alex_zh
Участник
 
8 / 10 (1) +
Регистрация: 02.07.2013
Цитата:
Сообщение от lev Посмотреть сообщение
А почему не используете отдельные методы класса??? Они же как раз для этого и существуют!

Когда в одном методе класса куча подфункций (а по мне так хоть одна), такой код очень проблематично поддерживать...
Редактирую чужой код - пытаюсь сделать по аналогии.
Я только начинаю разбираться с Аксаптой - далеко не все Best Practices знаю.
Учту Ваше замечание на будущее - спасибо.
Старый 02.07.2013, 14:00   #6  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Вообще желательно методы разделять и вызывать где вам нужно.

А по поводу [;] - подфункции тоже считаются объявлением, поэтому вам необходимо объявить переменные метода, написать все необходимые вам функции и только потом ставить[;]
Старый 02.07.2013, 14:19   #7  
foreverlost is offline
foreverlost
Участник
 
3 / 10 (1) +
Регистрация: 08.05.2013
Адрес: Спб
Цитата:
Сообщение от user_ax Посмотреть сообщение
Вообще желательно методы разделять и вызывать где вам нужно.

А по поводу [;] - подфункции тоже считаются объявлением, поэтому вам необходимо объявить переменные метода, написать все необходимые вам функции и только потом ставить[;]
возможно идиотский вопрос, а что если дважды объявлять?
То есть в случае ТС'а
X++:
#define.numberRow(18)
public void run()
{
    Name                     companyName, nameCustVend;
    str                         ss;

    // Это функция, которую я пытаюсь добавить
    Name getFactureNum()
    {
        Name    ret;
        // Здесь тоже будет некий функционал
        return ret;
    }
    ;
    Name                    companyName, nameCustVend;
    str                         ss;

    // Это уже имеющаяся функция
    Name getDocument()
    {
        Name    ret;
        // Здесь некий функционал
        return ret;
    }
    ;

    // Здесь некие операторы метода, в частности вызывающие функцию getDocument()
}
понятное дело, что это идиотизм, но комплиятор же не будет жаловаться?
Старый 02.07.2013, 14:40   #8  
NickMDAX is offline
NickMDAX
Участник
 
16 / 11 (1) +
Регистрация: 12.09.2011
Адрес: Moscow
Во первых, Да, компилятор будет ругаться и не даст вам дважды объявить переменные, так как после первой ";" он считает объявление всех переменных законченным.
Во вторых, он не даст вам объявить разные переменные с одинаковыми именами внутри одного метода.
Поэтому лучше поступить так, как вам предложили Lev и user_ax.
Старый 02.07.2013, 14:44   #9  
foreverlost is offline
foreverlost
Участник
 
3 / 10 (1) +
Регистрация: 08.05.2013
Адрес: Спб
Цитата:
Сообщение от NickMDAX Посмотреть сообщение
Во первых, Да, компилятор будет ругаться и не даст вам дважды объявить переменные, так как после первой ";" он считает объявление всех переменных законченным.
Во вторых, он не даст вам объявить разные переменные с одинаковыми именами внутри одного метода.
Поэтому лучше поступить так, как вам предложили Lev и user_ax.
я не ТС, а просто решил поинтересоваться, т.к. с х++ вообще не работал.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Имя метода класса в переменной. Swordec DAX: Программирование 6 28.06.2013 16:20
Из метода узнать наименование класса-родителя alicedr DAX: Программирование 4 25.01.2013 16:21
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Свойство элемента управления из метода класса Zeratul DAX: Программирование 4 11.05.2006 17:32
"Программный" вызов метода класса!? axaLearner DAX: Программирование 13 16.08.2005 08:12

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

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

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