Динамическая функция - это способ динамического вызова вызова функции.Компилятор будет иметь ограниченные знания о том, что вы делаете, поэтому вы получите ошибки времени выполнения, если вы не используете правильные входы и выходы.
Один пример, который запускает различные функции в зависимости от ввода пользователя:
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.