第二十一章 Caché 函數大全 $ISOBJECT 函數 第二十一章 Caché 函數大全 $ISOBJECT 函數 大綱 描述 參數 示例 注意

第二十一章 Caché 函數大全 $ISOBJECT 函數

返回表達式是否爲對象引用(OREF)。

大綱

$ISOBJECT(expr)

參數

  • expr CachéObjectScript表達式。

描述

如果expr是對象引用(OREF),則$ISOBJECT返回1。如果expr不是對象引用(OREF),則$ISOBJECT返回0。

如果expr是對無效對象的引用,則$ISOBJECT返回–1。在正常操作中不應出現無效的對象;例如,通過在類實例處於活動狀態時重新編譯該類,可以導致無效對象。

要刪除對象引用,請將變量設置爲空字符串(“”)。過時的%Close()方法不能用於刪除對象引用。 %Close()不執行任何操作,並且始終返回成功完成。編寫新代碼時不要使用%Close()

參數

expr

CachéObjectScript表達式。

示例

以下示例顯示了$ISOBJECT返回的對象引用和非對象引用(在這種情況下爲字符串引用)的值:

/// d ##class(PHA.TEST.Function).ISOBJECT()
ClassMethod ISOBJECT()
{
    SET a="當然不是一個對象"
    SET o=##class(%SQL.Statement).%New()
    WRITE !,"非對象 a: ",$ISOBJECT(a)
    WRITE !,"對象引用 o: ",$ISOBJECT(o)
}
DHC-APP>d ##class(PHA.TEST.Function).ISOBJECT()
 
非對象 a: 0
對象引用 o: 1

下面的示例顯示JSON值是對象引用:

/// d ##class(PHA.TEST.Function).ISOBJECTJSON()
ClassMethod ISOBJECTJSON()
{
    SET a=["apple","banana","orange"]
    SET b={"fruit":"orange","color":"orange"}
    WRITE !,"JSON array: ",$ISOBJECT(a)
    WRITE !,"JSON object: ",$ISOBJECT(b)
}
DHC-APP> d ##class(PHA.TEST.Function).ISOBJECTJSON()
 
JSON array: 1
JSON object: 1

下面的Dynamic SQL示例顯示 流 字段是OID,而不是對象引用。需要使用SQL%OBJECT函數來返回對象引用:

/// d ##class(PHA.TEST.Function).ISOBJECTsql()
ClassMethod ISOBJECTsql()
{
    ZNSPACE "SAMPLES"
    SET myquery=2
    SET myquery(1)="SELECT TOP 1 Name,Notes,%OBJECT(Notes) AS NoteObj "
    SET myquery(2)="FROM Sample.Employee WHERE Notes IS NOT NULL"
    SET tStatement = ##class(%SQL.Statement).%New()
    SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {
        WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT
    }
    SET rset = tStatement.%Execute()
    WHILE rset.%Next() {
        WRITE "Stream field oid: ",$ISOBJECT(rset.Notes),!
        WRITE "Stream field oref: ",$ISOBJECT(rset.NoteObj),!
    }
}
DHC-APP>d ##class(PHA.TEST.Function).ISOBJECTsql()
Stream field oid: 0
Stream field oref: 1
 

以下示例顯示如何刪除對象引用。 %Close()方法不會更改對象引用。將對象引用設置爲空字符串將刪除該對象引用:

/// d ##class(PHA.TEST.Function).ISOBJECTsql1()
ClassMethod ISOBJECTsql1()
{
    SET o=##class(%SQL.Statement).%New()
    WRITE !,"objref o: ",$ISOBJECT(o)
    DO o.%Close()  ; this is a no-op
    WRITE !,"objref o: ",$ISOBJECT(o)
    SET o=""
    WRITE !,"objref o: ",$ISOBJECT(o)
}
DHC-APP>d ##class(PHA.TEST.Function).ISOBJECTsql1()
 
objref o: 1
objref o: 1
objref o: 0

注意

%Close()並不會回收對象,將對象等於""纔會刪除對象引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章