第五十二章 Caché 函數大全 $PROPERTY 函數 第五十二章 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並且屬性名不是多維的,則會發生<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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章