Распечатать страницу

Передача параметров по значению и ссылке в VFP

« Назад

По умолчанию параметры, указанные в опции WITH команды DO, передаются по ссылке, а при вызове программного компонента как функции – по значению. Например:

do d:\Output with x, y        && Параметры x и y передаются по ссылке

Swap(x, y)                          && Параметры x и y передаются по значению

Передача по значению употребляется, когда параметры используются как входные и когда не нужно возвращать в вызывающую процедуру их новые значения. Если же параметры являются выходными (или одновременно и входными и выходными), то они должны быть переданы по ссылке.

Команда

SET UDFPARMS TO VALUE | REFERENCE

задает способ передачи параметров программному компоненту.

Опции:

VALUE – параметры-переменные передаются по значению. При передачи параметра по значению фактический параметр остается неизмененным, даже если выполнено изменение соответствующего формального параметра.

REFERENCE – параметры-переменные передаются по ссылке. При передачи параметра по ссылке фактический параметр принимает значение формального параметра.

Всегда по значению передаются константы и элементы массивов.

Независимо от установки SET UDFPARMS параметр, заключенный в скобки, передается по значению, а предваренный символом @ – по ссылке.

Программному компоненту будет передан весь массив, если он передается по ссылке. В противном случае будет передан по значению первый элемент массива.

Пример 1. Процедура SWAP( ) выполняет обмен значений двух своих параметров.

local x, y

store 25 to x

store –30 to y

&& Параметры будут передаваться по значению

set udfparms to value

swap(x, y)                           && Нет обмена

? x, y                                   && Напечатает: 25   –30

&& Параметры будут передаваться по ссылке

set udfparms to reference

? x, y                                   && Напечатает: 25   –30

Swap(x, y)                          && Есть обмен

? x, y                                   && Напечатает: –30   25

procedure Swap(a, b)

                                            local hold

                                            hold = a

                                            a = b

                                            b = hold

endProc

Пример 2. Использование символа @ и круглых скобок при передачи параметров.

local x, y

store 25 to x

store –30 to y

set udfparms to value

? x, y                                   && Напечатает: 25   –30

&& Оба параметра передаются по ссылке

Swap(@x, @y)

? x, y                                   && Напечатает: –30   25

&& Первый параметр передается по ссылке, второй – по значению

Swap(@x, (y))

? x, y                                   && Напечатает: 25   25

procedure Swap(a, b)

                                            && Текст процедуры Swap( ) см. выше

                                            …

endProc