Что именно делает ссылка на аргумент {}?

Я новичок в progress-4gl (OpenEdge), и я столкнулся с некоторым кодом, который на всю жизнь я не могу точно понять, что он делает. Ниже приведен пример кода, который я пытаюсь проанализировать, и все материалы, которые я нашел по ситуации.

Я понимаю, что мой ответ содержится в материале, но я не могу понять его так хорошо, как мне хотелось бы. Надеюсь, мне может помочь кто-нибудь, обладающий немного большими знаниями, чем я. Спасибо всем, кто потратил на это:

Function functionName RETURNS CHAR ( integerName AS INT ) {1}:

Эта функция хранится во включаемом файле и вызывается другой процедурой следующим образом:

charName = GetCommSecType ( intName )

Я не совсем понимаю, почему существует {1} и что именно он делает. Если я не поставлю {1}, все будет работать так же. Я просмотрел файл справки и вставил его информацию ниже:

{} Ссылка на аргумент:
Ссылается на значение аргумента, которое процедура передает в вызываемый файл внешней процедуры или во включаемый файл. ABL преобразует каждый аргумент в символьный формат. Это преобразование удаляет окружающие двойные кавычки, если параметр был указан как константа символьной строки в операторе RUN или в ссылке на файл включения. Когда одна процедура вызывается из другой и используются аргументы, ABL перекомпилирует вызываемую процедуру, подставляя аргументы, которые передает вызывающая процедура, а затем запускает вызываемую процедуру.

Я считаю, что цель этого - позволить запускать функцию включаемых файлов в команде RUN из командной строки. Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо


person Matt_ello    schedule 14.02.2014    source источник


Ответы (1)


{} - это то, что называется препроцессором, что означает, что он влияет только на результат вашей программы во время компиляции, а не во время выполнения.

Обычно вы включаете файл .i, а не запускаете его, но такой синтаксис можно использовать как для запуска, так и для включения файлов.

В данном конкретном случае это означает, что компилятор вставит что-то, где написано {1}. {1} обозначает первый вставленный аргумент. Вы также можете давать имена аргументам (см. Ссылку ниже).

Простое включение такого файла:

{filename.i}

В этом случае не очень легко угадать, что вставлено, но в основном, если вы сделаете включение вроде этого:

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.
c = "ABC".
{c:\temp\includetest.i c}

Компилятор вставит ABC, где {1} записано в ваш включаемый файл. Конечно, в данном примере это не имело бы смысла. И сейчас у меня нет ничего, что действительно можно было бы написать между параметрами и двоеточием.

Допустим, ваш файл filname.i просто содержит.

DISPLAY {1}.

Выполнение включения, как описано выше, затем заставит компилятор заменить {1} на "ABC", и, таким образом, оператор будет выглядеть следующим образом:

DISPLAY c.

Выполнение этого приведет к отображению значения c - «ABC».

Для лучшего понимания вам нужно будет предоставить работающий код или включить ваш файл!

Страницы 22 и последующие в этом документе описывает это глубже.

person Jensd    schedule 14.02.2014
comment
Спасибо за подробное объяснение и упомянутый документ, это тот же документ, который я просмотрел перед публикацией. Мой единственный вопрос к вашему объяснению заключается в следующем: функция в функции включаемого файла имеет параметр и {1}. Поэтому, когда моя процедура вызывает функцию во включаемом файле, она передает целое число. Так тогда Interger проходит дважды? - person Matt_ello; 14.02.2014
comment
Нет, это не имеет отношения к вызову функции. Это влияет на включение или запуск файла. - person Jensd; 14.02.2014
comment
Число внутри {} не имеет ничего общего с параметрами функций и не используется как целое число, оно относится к позиции параметра, переданного при использовании включения. - person pedromarce; 17.02.2014
comment
Хорошо, спасибо, что прояснили это, теперь я думаю, что понимаю. Просто нужно попрактиковаться в кодировании препроцессора. - person Matt_ello; 18.02.2014