Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

引数の参照渡し

既定では、クラス・メソッドの引数は値によって渡されます。つまり、クラス・メソッドは渡された変数の値を受け取りますが、その値の変更は非公開であり、メソッド内でのみ認識可能です。メソッド外の元の変数の値は変化しません。例の最初の部分の DoubleByVal() は変数 num を使用してそれを 2 倍にしますが、クラス・メソッドの外部の num 変数の値は変化しません。

ObjectScript は引数を参照によって渡すこともできます。つまり、クラス・メソッドが変数の値を変更するときに、そのメソッド外の変数の値を変更します。この場合、両方の変数が同じメモリ位置を参照します。参照によってクラス・メソッドに引数を渡すことができるのは、引数の前にドットが付いている場合のみです。配列をメソッドに渡すには、ドットを使用して参照によって渡す必要があります

  • DoubleByRef1() クラス・メソッドは num を 2 倍にします。これはドットが num の前に付いているためです。メソッド・シグニチャの ByRef は、単にドットを使用するよう呼び出し側に注意を促すものです。

  • DoubleByRef2() クラス・メソッドは、result を作成してその前にドットを付けて、num を 2 倍にします。メソッド・シグニチャの Output は、単にドットを使用するよう呼び出し側に注意を促すものです。

引数を渡す処理の例:

VS Code - ObjectScript


/// examples for ObjectScript Tutorial
Class ObjectScript.Examples
{

/// demo of passing arguments by value and reference
ClassMethod PassingArguments(num as %Numeric)
{
    // pass by value
    set dblnum = ..DoubleByVal(num)
    write !, "By Value: ", num, " doubled is: ", dblnum

    // num passed IN and OUT by reference
    write !, "By Reference 1: ", num
    do ..DoubleByRef1(.num)
    write " doubled is: ", num

    // num passed IN by value, result passed OUT by reference
    do ..DoubleByRef2(num, .result)
    write !, "By Reference 2: ", num, " doubled again is: ", result    
}

ClassMethod DoubleByVal(anynumber as %Numeric) as %Numeric
{
    return anynumber * 2
}

ClassMethod DoubleByRef1(ByRef anynumber as %Numeric)
{
    set anynumber = anynumber * 2
}

ClassMethod DoubleByRef2(anynumber as %Numeric, Output retnumber as %Numeric)
{
    set retnumber = anynumber * 2
}
}
ターミナルを使用したテスト


USER>do ##class(ObjectScript.Examples).PassingArguments(3)

By Value: 3 doubled is: 6
By Reference 1: 3 doubled is: 6
By Reference 2: 6 doubled again is: 12
USER>
FeedbackOpens in a new tab