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?

$PROPERTY

インスタンスの特定プロパティへの参照をサポートします。

Synopsis

$PROPERTY(instance, propertyname, index1, index2, index3... )

パラメータ

instance オブジェクト・インスタンス参照 (OREF) に評価される式。この表現の値は、目的のクラスのメモリにあるインスタンスの値を指定する必要があります。
propertyname 文字列として評価される式。この文字列の値は、instance で指定されたクラスで定義されている既存のプロパティ名と一致する必要があります。
index1, index2, index3, ... オプションpropertyname が多次元値である場合、この一連の式はプロパティが表す配列へのインデックスとして扱われます(指定したプロパティが多次元でない場合、余分な引数があると実行時にエラーが発生します)。

説明

$PROPERTY は、指定されたクラスにあるインスタンスで、プロパティの値を取得または設定します。この関数は、ObjectScript プログラムが、あるクラスの既存のインスタンス内の任意のプロパティの値を選択することを許可します。最初の引数はクラスのインスタンスでなければならないため、実行時に算出されます。プロパティ名は、実行時に算出することもできれば、文字列リテラルとして指定しておくこともできます。文字列の内容は、クラスで宣言されたプロパティの名前と正確に一致する必要があります。プロパティ名は、大文字と小文字を区別します。

プロパティが多次元であるとして宣言されている場合は、プロパティ名の後の引数は、多次元配列へのインデックスとして扱われます。最大で 255 の引数をインデックスに使用できます。

$PROPERTY は割り当て式の左側にも記述できます。$PROPERTY が割り当て演算子の左にある場合は、値の割り当て先の場所を指定します。右側にある場合は計算で使用する値であることを示します。

instance が有効なメモリ内 OREF ではない場合、<INVALID OREF> エラーが発生します。propertyname が有効なプロパティではない場合、<PROPERTY DOES NOT EXIST> エラーが発生します。index1 を指定し、かつ propertyname が多次元でない場合、<OBJECT DISPATCH> エラーが発生します。

備考

$PROPERTY 関数は、渡されたプロパティの Get() メソッドまたは Set() メソッドを呼び出します。この関数は、“Instance.PropertyName” 構文と機能的には同じです。ここで、“Instance” および “PropertyName” は、この関数のシグニチャに記述する引数と同等です。このため、プロパティに Get() メソッドや Set() メソッドが存在する場合、その中では $PROPERTY を呼び出さないでください。Get() メソッドおよび Set() メソッドの詳細は、"Caché オブジェクトの使用法" の “プロパティ・メソッドの使用とオーバーライド” の章を参照してください。

メソッド内で、現在のインスタンスのプロパティを参照するために $PROPERTY を使用する場合は、instance を省略できます。ただし、普通は instance の後に続くコンマは、この場合も必要です。

多次元として宣言されていないプロパティから多次元値を取得したり、多次元ではないプロパティに多次元値を設定したりしようとすると、<FUNCTION> エラーが発生します。

以下の例は 現在の NLS 言語プロパティ値を返します。

  SET nlsoref=##class(%SYS.NLS.Locale).%New()
  WRITE $PROPERTY(nlsoref,"Language")

以下は、$PROPERTY を関数として使用する例です。

 SET TestName = "%Library.File"
 SET ClassDef = ##class(%Library.ClassDefinition).%OpenId(TestName)
 FOR i = "Name", "Super", "Persistent", "Final" 
 {
    WRITE i, ": ", $PROPERTY(ClassDef, i), !
 }

以下は、割り当て演算子の右と左の両方で $PROPERTY を使用する例です。

 SET TestFile = ##class(%Library.File).%New("AFile")
 WRITE "Initial file name: ",$PROPERTY(TestFile,"Name"),!
 SET $PROPERTY(TestFile,"Name") = 
         $PROPERTY(TestFile,"Name") _ "Renamed"
 WRITE "File name afterward: ",$PROPERTY(TestFile,"Name"),!

関連項目

FeedbackOpens in a new tab