文章目录
第五十二章 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"