Динамические функции в процессе - PullRequest
0 голосов
/ 07 декабря 2018

Что такое динамическая функция в процессе выполнения 4gl? Я пробовал много, но у меня нет четкого понимания. Пожалуйста, объясните на примере.Я большой новичок в этом языке.

1 Ответ

0 голосов
/ 07 декабря 2018

Динамическая функция - это способ динамического вызова вызова функции.Компилятор будет иметь ограниченные знания о том, что вы делаете, поэтому вы получите ошибки времени выполнения, если вы не используете правильные входы и выходы.

Один пример, который запускает различные функции в зависимости от ввода пользователя:

DEFINE VARIABLE iFunc   AS INTEGER NO-UNDO.
DEFINE VARIABLE iReturn AS INTEGER NO-UNDO.

FUNCTION f1 RETURNS INTEGER :
    RETURN 1.        
END FUNCTION.

FUNCTION f2 RETURNS INTEGER :
    RETURN 2.        
END FUNCTION.

FUNCTION f3 RETURNS INTEGER :
    RETURN 3.        
END FUNCTION.

FUNCTION exp RETURNS INTEGER (INPUT piInt AS INTEGER):

    RETURN piInt * piInt.

END FUNCTION.

REPEAT :
    UPDATE iFunc LABEL "What function?".

    IF iFunc < 1 OR iFunc > 3 THEN LEAVE.
    MESSAGE "Return value: " DYNAMIC-FUNCTION ("f" + STRING(iFunc)) VIEW-AS ALERT-BOX.
END.

Другой пример, где функция получает ввод:

FUNCTION exp RETURNS INTEGER (INPUT piInt AS INTEGER):

    RETURN piInt * piInt.

END FUNCTION.


MESSAGE "10 x 10 = " DYNAMIC-FUNCTION ("exp", 10) VIEW-AS ALERT-BOX.

Этот вызов "функция exp будет скомпилирована, но потерпит крах во время выполнения.Код отправляет строку («HELLO») в качестве ввода, где функция ожидает целое число.

MESSAGE "10 x 10 = " DYNAMIC-FUNCTION ("exp", "HELLO") VIEW-AS ALERT-BOX.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...