第五十二章 Caché 函数大全 $PROPERTY 函数

第五十二章 Caché 函数大全 $PROPERTY 函数

支持对实例的特定属性的引用。

大纲

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

参数

  • instance 可选-表达式,其结果为对象实例引用(OREF)。表达式的值必须是所需类的内存实例的值。如果省略,则默认为当前对象。
  • propertyname 计算结果为字符串的表达式。字符串的值必须与实例所标识的类中定义的现有属性的名称匹配。
  • index1, index2, index3, ... 可选-如果propertyname是一个多维值,则将这一系列表达式视为该属性表示的数组的索引。 (如果指定的属性不是多维属性,则多余的参数会在运行时导致错误。)

描述

$PROPERTY获取或设置指定类的实例中的属性的值。此函数允许ObjectScript程序在某个类的现有实例中选择任意属性的值。由于第一个参数必须是类的实例,因此它是在执行时计算的。属性名称可以在运行时计算,也可以作为字符串文字提供。字符串的内容必须与在类中声明的属性的名称完全匹配。属性名称区分大小写。

如果将属性声明为多维,则将属性名后面的参数视为多维数组的索引。索引最多可以使用255个参数值。

$PROPERTY也可能出现在分配的左侧。当$PROPERTY出现在赋值运算符的左侧时,它提供了将值分配到的位置。当它出现在右侧时,它是计算中使用的值。

如果实例不是有效的内存中OREF,则会发生错误。如果propertyname不是有效的属性,则会出现错误。如果指定index1并且属性名不是多维的,则会发生错误。

备注

$PROPERTY函数调用传递给它的属性的Get()Set()方法。它在功能上与使用“Instance.PropertyName”语法相同,其中“Instance”“PropertyName”等效于函数签名中列出的参数。因此,如果属性存在,则不应在属性的Get()Set()方法中调用$PROPERTY

当在方法中用于引用当前实例的属性时,$PROPERTY可以省略实例。但是,仍然需要通常跟随实例的逗号。

尝试从未声明为多维的属性中获取多维值会导致错误。同样用于尝试将多维值设置为非多维属性。

示例

下面的示例返回当前的NLS Language属性值:

DHC-APP>SET nlsoref=##class(%SYS.NLS.Locale).%New()
 
DHC-APP>WRITE $PROPERTY(nlsoref,"Language")
Simplified Chinese

以下示例显示了$PROPERTY用作函数:

/// d ##class(PHA.TEST.Function).PROPERTY()
ClassMethod PROPERTY()
{
    SET TestName = "%Library.File"
    SET ClassDef = ##class(%Library.ClassDefinition).%OpenId(TestName)
    FOR i = "Name", "Super", "Persistent", "Final" 
    {
        WRITE i, ": ", $PROPERTY(ClassDef, i), !
    }
}
DHC-APP>d ##class(PHA.TEST.Function).PROPERTY()
Name: %Library.File
Super: %AbstractStream
Persistent: 0
Final: 0

下面的示例显示在赋值运算符的两侧使用的$PROPERTY

/// d ##class(PHA.TEST.Function).PROPERTY1()
ClassMethod PROPERTY1()
{
    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"),!
}
DHC-APP> d ##class(PHA.TEST.Function).PROPERTY1()
Initial file name: AFile
File name afterward: AFileRenamed

下面的示例从当前对象(在本例中为SQL Shell)返回属性值。指定$PROPERTY时,省略其第一个参数:

DHC-APP>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------
 
The command prefix is currently set to: <>.
Enter q to quit, ? for help.
DHC-APP>>set path="a,b,c"
 
path = "a,b,c"
DHC-APP>>COS WRITE "The schema search path is ",$PROPERTY(,"Path")
The schema search path is "a,b,c"

你可能感兴趣的:(第五十二章 Caché 函数大全 $PROPERTY 函数)