美文网首页
第十八章 Caché 函数大全 $GET 函数

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

作者: Cache技术分享 | 来源:发表于2020-09-08 09:27 被阅读0次

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

    返回指定变量的数据值。

    大纲

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

    Parameters

    • variable 下标或未下标的局部变量,全局变量或进程专用全局变量。该变量可能是未定义的。可以使用obj.property语法将变量指定为多维对象属性。
    • default 可选-如果变量未定义,则返回的值。如果是变量,则必须定义。

    描述

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

    • $GET(variable)返回指定变量的值,如果变量未定义,则返回空字符串。变量参数值可以是任何变量的名称,包括带下标的数组元素(局部变量或全局变量)。
    • $GET(variable,default) 提供一个默认值,如果变量未定义,则返回该值。如果定义了变量,则$GET返回其值。
    DHC-APP>w $g(a,"asc")
    asc
    

    参数

    variable

    要返回其数据值的变量。

    • 变量可以是局部变量,全局变量或进程专用全局(PPG)变量。它可以下标或不下标。

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

    • 变量可以是多维对象属性,不能是非多维对象属性。尝试在非多维对象属性上使用$GET会导致<Object Dispatch>错误。

    $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-LISSRC
    Namespace: DHC-MEDSRC
    Namespace: DHC-MRQ
    Namespace: DOCBOOK
    Namespace: FDBMS
    Namespace: PACS
    Namespace: PIS
    Namespace: RIS
    Namespace: SAMPLES
    Namespace: USER
    Done!
    

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

    注意

    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用于第二个测试)。

    默认值为GET和SELECT

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

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

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

    处理未定义的变量

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

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

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

    相关文章

      网友评论

          本文标题:第十八章 Caché 函数大全 $GET 函数

          本文链接:https://www.haomeiwen.com/subject/qtkdektx.html