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

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108527468
今日推荐