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