Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

参照渡しのパラメータ (1)

プロシージャ (外部関数を含む) はパラメータを受け取ります。既定値では、パラメータは値によって渡されます。つまりプロシージャは、渡された変数の値を使用できますが、変数の値自体を変更することはできません。例の最初の部分の $$dblbyval は変数 num を使用してそれを 2 倍にしますが、プロシージャの外部の num 変数の値は変化しません。

他の言語と同様、ObjectScript はパラメータを参照によって渡すことができるため、その変数値をプロシージャで変更できます。プロシージャを呼び出す場合は、変数名の先頭にドットを付けます。dblbyref1 プロシージャは num を 2 倍にしますが、これは単にドットが num の前に付いているためです。参照によってプロシージャにパラメータを渡すことができるのは、正確にプロシージャを呼び出し、パラメータの前にドットが付いている場合のみです。dblbyref2 プロシージャは result と呼ばれる新規の変数を作成することによって、num を 2 倍にして返します。

SAMPLES>do ^passbyref

Enter a number: 3
3 doubled is: 6
3 doubled is: 6
6 doubled again is: 12
SAMPLES>

passbyref.mac のコードは以下のとおりです。

passbyref ; passing parameters by value and reference
    ; pass by value
    read !, "Enter a number: ", num
    set dblnum = $$dblbyval( num )
    write !, num, " doubled is: ", dblnum

    ; num passed IN and OUT by reference
    write !, num
    do dblbyref1( .num )
    write " doubled is: ", num

    ; num passed IN by value
    ; result passed OUT by reference
    do dblbyref2(num, .result)
    write !, num, " doubled again is: ", result
    quit

dblbyval(anynum) PUBLIC
    { quit anynum * 2 }

dblbyref1(anynum) PUBLIC
    { set anynum = anynum * 2
    quit }

dblbyref2(anynum, double) PUBLIC
    { set double = anynum * 2
    quit }
FeedbackOpens in a new tab