其他分享
首页 > 其他分享> > 第十八章 Caché 函数大全 $GET 函数

第十八章 Caché 函数大全 $GET 函数

作者:互联网

 

文章目录

 

 
第十八章 Caché 函数大全 $GET 函数

返回指定变量的数据值。

大纲
$GET(variable,default)
$G(variable,default)

Parameters

描述

$GET返回指定变量的数据值。未定义变量的处理取决于是否指定默认参数。

DHC-APP>w $g(a,"asc")
asc
参数

variable

要返回其数据值的变量。

该变量不需要是定义的变量。$GET返回未定义变量的空字符串;它不定义该变量。可以定义变量并将其设置为空字符串(“”)。如果是全局变量,则它可以包含扩展的全局引用。如果是带下标的全局变量,则可以使用裸全局引用指定它。即使在引用未定义的下标全局变量时,变量也会重置裸指示符,从而影响将来的裸全局引用,如下所述。

$GET无法返回代理对象属性的属性值。相反,Caché会发出一条消息,指出指定的属性不存在。此属性访问限制对于类%ZEN.proxyObject是唯一的,该类在InterSystems类参考中定义。

default

未定义变量时要返回的数据值。它可以是任何表达式,包括局部变量或全局变量,带下标或不带下标。如果是全局变量,则它可以包含扩展的全局引用。如果是带下标的全局变量,则可以使用裸全局引用指定它。如果存在,DEFAULT将重置裸指示器,从而影响将来的裸全局引用,如下所述。

如果DEFAULT是一个未定义的变量,则默认情况下,$GET会发出<UNDEFINED>错误,即使定义了变量也是如此。通过设置%SYSTEM.Process.Unfined()方法,可以更改Caché行为,使其在引用未定义变量时不会生成<UNDEFINED>错误。如果unfined()方法设置为不生成<UNDEFINED>错误,则当默认值为unfined时,$GET将返回变量。

示例

在下面的示例中,定义了变量test,而未定义变量xtest。(使用ZWRITE命令是因为它显式返回NULL字符串值。)

/// d ##class(PHA.TEST.Function).Get()
ClassMethod Get()
{
	KILL xtest
	SET test="banana"
	SET tdef=$GET(test),tundef=$GET(xtest)
	ZWRITE tdef    ; $ GET测试的返回值
	ZWRITE tundef  ; $ GET为xtest返回空字符串
	WRITE !,$GET(xtest,"none") 
	; $ GET返回未定义变量的默认值“ none”
}
DHC-APP>d ##class(PHA.TEST.Function).Get()
tdef="banana"
tundef=""
 
none

在以下示例中,将多维属性用作变量值。本示例返回所有定义的名称空间的名称:

/// d ##class(PHA.TEST.Function).Get1()
ClassMethod Get1()
{
	SET obj = ##class(%ResultSet).%New("%SYS.Namespace:List")
	DO obj.Execute()
	WRITE !,$GET(obj.Data,"none") // returns "none"
	SET x=1
	WHILE x'="" {
		DO obj.Next()
		SET x=$GET(obj.Data("Nsp"))
		IF x'="" {
		WRITE !,"Namespace: ",x }
	}
	WRITE !,"Done!"
}
DHC-APP>d ##class(PHA.TEST.Function).Get1()
 
none
Namespace: %SYS
Namespace: DHC-APP
Namespace: DHC-CHSSWEB
Namespace: DHC-CSM
Namespace: DHC-DATA
Namespace: DHC-DWR
Namespace: DHC-EKG
Namespace: DHC-HEIS
Namespace: DHC-HR
Namespace: DHC-LISDATA
Namespace: DHC-LI***C
Namespace: DHC-MEDSRC
Namespace: DHC-MRQ
Namespace: DOCBOOK
Namespace: FDBMS
Namespace: PACS
Namespace: PIS
Namespace: RIS
Namespace: SAMPLES
Namespace: USER
Done!

类似的程序使用$DATA函数返回相同的信息。

注意

G E T 与 GET与 GET与DATA相比

$GET为未定义变量($DATA = 0)和为无数据的向下指针的数组节点($DATA = 10)提供了$DATA测试的替代方法。如果变量是未定义的或没有数据的指针数组节点,则$GET返回空字符串(“”),而不会出现未定义的错误。例如,可以重新编码以下行:

   IF $DATA(^client(i))=10 {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
   }

   IF $GET(^client(i))="" {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
   }

请注意,$DATA测试比$GET测试更具体,因为它们使能够区分未定义元素和仅是向下指针的元素。例如,这些行:

    IF $DATA(^client(i))=0 { QUIT }
    ELSEIF $DATA(^client(i))=10 {
    WRITE !!,"Name: No Data" 
    GOTO Level1+3 
    }

无法重新编码为:

    IF $GET(^client(i))="" { QUIT }
    ELSEIF $GET(^client(i))="" {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
    }

这两行根据数组元素是未定义的还是没有数据的向下指针执行不同的操作。如果在这里使用$GET,则只会执行第一个动作(QUIT)。可以将$DATA用于第一个测试,将$GET用于第二个测试,但不能反向使用($GET用于第一个测试,$DATA用于第二个测试)。

默认值为 G E T 和 GET和 GET和SELECT

$GET(variable,default)允许在未定义指定变量时返回默认值。可以使用$SELECT函数执行相同的操作。

但是,与$SELECT不同,$GET中的第二个参数始终被求值。

如果变量和默认值都使用下标的全局引用并因此都修改了裸指标,则$GET始终会评估其两个参数这一事实很重要。因为参数是按从左到右的顺序求值的,所以无论$GET是否返回默认值,裸指标都设置为默认的全局引用。

处理未定义的变量

如果指定的变量未定义,$GET定义处理行为。如果未定义指定的变量,则$GET的基本形式将返回一个空字符串(“”)。

$DATA测试是否定义了指定的变量。如果变量未定义,则返回0。

可以使用%SYSTEM.Process类的Undefined()方法为每个进程定义所有未定义变量的处理行为。可以通过设置Config.Miscellaneous类的Undefined属性来建立系统范围的默认行为。设置未定义对指定变量的$GET或$DATA处理没有影响。

 

标签:变量,未定义,GET,DHC,Namespace,DATA,Cach,函数
来源: https://blog.51cto.com/u_12956943/3041671