第二十一章 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()
并不会回收对象,将对象等于""
才会删除对象引用。