第二十一章 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()
並不會回收對象,將對象等於""
纔會刪除對象引用。