第五十二章 Caché 函数大全 $PROPERTY 函数
支持对实例的特定属性的引用。
大纲
$PROPERTY(instance, propertyname, index1, index2, index3... )
参数
- instance 可选-表达式,其结果为对象实例引用(OREF)。表达式的值必须是所需类的内存实例的值。如果省略,则默认为当前对象。
- propertyname 计算结果为字符串的表达式。字符串的值必须与实例所标识的类中定义的现有属性的名称匹配。
- index1, index2, index3, ... 可选-如果propertyname是一个多维值,则将这一系列表达式视为该属性表示的数组的索引。 (如果指定的属性不是多维属性,则多余的参数会在运行时导致错误。)
描述
$PROPERTY
获取或设置指定类的实例中的属性的值。此函数允许ObjectScript程序在某个类的现有实例中选择任意属性的值。由于第一个参数必须是类的实例,因此它是在执行时计算的。属性名称可以在运行时计算,也可以作为字符串文字提供。字符串的内容必须与在类中声明的属性的名称完全匹配。属性名称区分大小写。
如果将属性声明为多维,则将属性名后面的参数视为多维数组的索引。索引最多可以使用255个参数值。
$PROPERTY
也可能出现在分配的左侧。当$PROPERTY
出现在赋值运算符的左侧时,它提供了将值分配到的位置。当它出现在右侧时,它是计算中使用的值。
如果实例不是有效的内存中OREF,则会发生错误。如果propertyname不是有效的属性,则会出现错误。如果指定index1并且属性名不是多维的,则会发生<OBJECT DISPATCH>
错误。
备注
$PROPERTY
函数调用传递给它的属性的Get()
或Set()
方法。它在功能上与使用“Instance.PropertyName”
语法相同,其中“Instance”
和“PropertyName”
等效于函数签名中列出的参数。因此,如果属性存在,则不应在属性的Get()
或Set()
方法中调用$PROPERTY
。
当在方法中用于引用当前实例的属性时,$PROPERTY
可以省略实例。但是,仍然需要通常跟随实例的逗号。
尝试从未声明为多维的属性中获取多维值会导致<FUNCTION>
错误。同样用于尝试将多维值设置为非多维属性。
示例
下面的示例返回当前的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: <<nothing>>.
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"