文章目录

  • 第四十章 Caché 变量大全 $ZREFERENCE 变量
  • 大纲
  • 描述
    • 长全局变量名称
    • 裸全局变量引用
    • 扩展局变量引用
    • 更新`$ZREFERENCE`的操作
    • 设置`$ZREFERENCE`
  • 示例

第四十章 Caché 变量大全 $ZREFERENCE 变量

包含当前全局变量global引用。

大纲

$ZREFERENCE
$ZR

描述

$ZREFERENCE包含上次全局引用的名称和下标。这就是所谓裸指针。

注意:最后一个全局引用是最近访问的全局节点。通常,这是对全局的最新显式引用。但是,某些命令可能在内部使用$ORDER函数遍历全局下标(ZWRITE命令就是一个例子),或者它们可能在内部引用其他全局脚本。发生这种情况时,$ZREFERENCE包含上次访问的全局节点,该节点可能不是为命令指定的全局节点。

最后一个全局引用可以是全局(^myglob)或进程专用全局(^||myppg)。$ZREFERENCE以最初用于该变量的形式返回进程专用全局前缀,而不管随后对该变量使用哪个进程专用全局前缀。在接下来的$ZREFERENCE描述中,单词“global”指的是这两种类型的变量。

最后一个全局引用是命令或函数最近引用的全局。由于ObjectScript按从左到右的顺序执行操作,因此最后一个全局引用始终是最右侧的全局引用。当命令或函数使用多个参数时,最右侧参数中指定的全局参数是最后一个全局引用。当参数包含多个全局引用时,最右侧指定的全局引用是最后一个全局引用。即使使用圆括号来定义操作顺序,从左到右的严格顺序也是正确的。

当发出显式全局引用时,InterSystems IRIS会更新$ZREFERENCE。调用计算结果为全局引用的表达式(如局部变量)不会更新$ZREFERENCE

$ZREFERENCE包含最新的全局引用,即使此全局引用不成功。当命令引用未定义的全局时,会发出<unfined>错误,InterSystems IRIS会将$ZREFERENCE更新为该全局引用,就像定义了全局一样。此行为不受设置%SYSTEM.Process.Unfined()方法的影响。

$ZREFERENCE通常包含最新的全局引用,即使命令执行不成功。InterSystems IRIS在引用每个全局变量时更新$ZREFERENCE。例如,发出<Divide>错误(试图将数字除以0)的命令会将$ZREFERENCE更新为错误发生前命令中引用的最后一个全局变量。但是,<SYNTAX>错误不会更新$ZREFERENCE

长全局变量名称

如果全局名称超过31个字符(不包括全局前缀字符,如^),$ZREFERENCE将返回缩短为31个字符的全局名称。

裸全局变量引用

如果上一个全局引用是裸全局引用,则$ZREFERENCE包含当前裸全局引用的外部、可读的完整形式。下面的示例演示了这一点:

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE()
ClassMethod ZREFERENCE()
{SET ^MyData(1)="fruit"SET ^MyData(1,1)="apples" ; 完整的全局变量引用SET ^(2)="oranges"        ; 裸全局变量引用, 映射 ^MyData(1,2)WRITE !,$ZREFERENCE       ; Returns "^MyData(1,2)"
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE()^MyData(1,2)

扩展局变量引用

扩展局变量引用用于引用当前命名空间以外的命名空间中的全局。如果命令使用扩展全局引用引用全局变量,则$ZREFERENCE值将包含该扩展全局引用。在以下情况下,InterSystems IRIS返回扩展的全局引用:

  • 如果最后一个全局引用使用扩展引用来引用另一个命名空间中的全局。
  • 如果最后一个全局引用使用扩展引用来引用当前命名空间中的全局。
  • 如果最后一个全局引用是远程引用(远程系统上的全局引用)。

在所有情况下,$ZREFERENCE都以全部大写字母返回命名空间名称,而不管它在全局引用中是如何指定的。

更新$ZREFERENCE的操作

$ZREFERENCE特殊变量被初始化为空字符串(“”)。更改当前名称空间会将$ZREFERENCE重置为空字符串。

以下操作将$ZREFERENCE设置为最近引用的GLOBAL

  • 使用全局变量作为参数的命令或函数。如果它使用多个全局变量,则$ZREFERENCE被设置为全局变量的最右侧匹配项。(但请注意,$ORDER除外。)
  • 使用全局作为后置条件表达式的命令。
  • ZWRITE之后,InterSystems IRIS将$ZREFERENCE设置为指定全局引用的上次访问的下标节点。
  • 引用未定义的全局变量的命令或函数,它或者生成<unfined>错误,或者在$INCREMENT的情况下定义全局变量。

设置$ZREFERENCE

可以使用set命令设置此特殊变量,如下所示:

  • 设置为空字符串(“”)。这样做会删除裸指示器。如果下一个全局引用是裸全局引用,则InterSystems IRIS会发出<naked>错误。
  • 设置为有效的全局参照(已定义或未定义)。这会导致后续的裸引用使用设置的值,就好像它是最后一个实际的全局引用一样。

不能使用SET命令以其他方式修改$ZREFERENCE。尝试这样做会导致<SYNTAX>错误。

示例

下面的示例返回最后一个全局引用:

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE1()
ClassMethod ZREFERENCE1()
{SET ^a(1,1)="Hello"  ; 完整的全局变量引用SET ^(2)=" world!"   ; 裸全局变量引用WRITE $ZREFERENCE
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE1()
^a(1,2)

下面的示例从几个不同的命令返回全局引用。请注意,WRITEZWRITE设置同一全局引用的不同表示形式。

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE2()
ClassMethod ZREFERENCE2()
{SET (^barney,^betty,^wilma,^fred)="flintstone"WRITE !,"1:"_$ZREFERENCEKILL ^fliesWRITE !,"2:"_$ZREFERENCEWRITE !,^fredWRITE !,"3:"_$ZREFERENCE,!ZWRITE ^fredWRITE !,"4:"_$ZREFERENCE
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE2()1:^fred  // 按从左到右顺序设置的几个全局变量中的最后一个
2:^flies // KILL设置全局指示器,但没有全局要杀死的指示器
flintstone
3:^fred
^fred="flintstone"4:^fred("")

下面的示例返回扩展的全局引用。请注意,名称空间名称始终以大写字母返回:

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE3()
ClassMethod ZREFERENCE3()
{SET ^["samples"]a(1,1)="Hello"SET ^(2)=" world!"WRITE $ZREFERENCEQUIT
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE3()
^["SAMPLES"]a(1,2)

下面的示例返回最后一个全局引用。在本例中,它是^a(1),用作$LENGTH函数的参数:

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE4()
ClassMethod ZREFERENCE4()
{SET ^a(1)="abcdefghijklmnopqrstuvwxyz"SET ^b(1)="1234567890"SET x=$LENGTH(^a(1))WRITE $ZREFERENCEQUIT
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE4()
^a(1)

下面的示例返回为$ZREFERENCE设置的值,就好像它是最后一个全局引用一样。在本例中,它是^a(1,1)

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE5()
ClassMethod ZREFERENCE5()
{SET ^a(1,1)="abcdefghijklmnopqrstuvwxyz"SET ^b(1,1)="1234567890"WRITE !,^(1) ; 裸全局变量引用使用上一个全局变量:SET $ZREFERENCE="^a(1,1)"WRITE !,$ZREFERENCEWRITE !,^(1)  ; 裸全局变量使用$ZREFERENCE值,而不是最后一个全局值。.
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE5()1234567890
^a(1,1)
abcdefghijklmnopqrstuvwxyz

下面的示例设置扩展的全局引用。请注意双引号:

/// d ##class(PHA.TEST.SpecialVariables).ZREFERENCE6()
ClassMethod ZREFERENCE6()
{KILL ^xWRITE !,$ZREFERENCESET $ZREFERENCE="^[""samples""]a(1,2)"WRITE !,$ZREFERENCE
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZREFERENCE6()^x
^["SAMPLES"]a(1,2)

第四十章 Caché 变量大全 $ZREFERENCE 变量相关推荐

  1. Caché 变量大全

    Caché 变量大全 系统变量 第一章 Caché 变量大全 $DEVICE 变量☆☆☆ 第二章 Caché 变量大全 $ECODE 变量☆☆☆ 第三章 Caché 变量大全 $ESTACK 变量☆☆ ...

  2. Caché 命令大全

    Caché ObjectScript 命令 第一章 Caché 命令大全 BREAK 命令☆☆☆☆☆ 第二章 Caché 命令大全 CATCH 命令☆☆☆☆ 第三章 Caché 命令大全 CLOSE ...

  3. Caché 函数大全

    Caché 函数大全 Caché ObjectScript函数 第一章 Caché 函数大全 $ASCII 函数☆☆☆☆☆ 第二章 Caché 函数大全 $BIT 函数☆☆☆ 第三章 Caché 函数 ...

  4. 第二十四章 Caché 变量大全 $ZA 变量

    文章目录 第二十四章 Caché 变量大全 $ZA 变量 大纲 描述 注意 `$ZA`,带终端I / O 带磁带I / O的$ZA 第二十四章 Caché 变量大全 $ZA 变量 包含当前设备上最后一 ...

  5. 第四十六章 Caché 变量大全 ^$GLOBAL 变量

    文章目录 第四十六章 Caché 变量大全 ^$GLOBAL 变量 大纲 参数 描述 进程私有全局变量 参数 nspace global_name 示例 作为`$DATA`的参数 作为`$ORDER` ...

  6. 第四十九章 Caché 变量大全 ^$ROUTINE 变量

    文章目录 第四十九章 Caché 变量大全 ^$ROUTINE 变量 大纲 参数 描述 参数 nspace routine_name 示例 作为$DATA的参数 作为`$ORDER`的参数 作为$QU ...

  7. 第六章 Caché 变量大全 $HOROLOG 变量

    文章目录 第六章 Caché 变量大全 $HOROLOG 变量 大纲 描述 分割日期与时间 日期和时间函数比较 日期和时间转换 设定日期和时间 时区 夏令时 本地时变阈值 1840年以前的日期 示例 ...

  8. Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量

    目录 一.JavaScript中的注释 二.变量的命名规则 三.变量声明以及赋值 四.变量作用域 五.变量提升 一.JavaScript中的注释 JavaScript中单行注释通过"//&q ...

  9. 第二章 Caché 变量大全 $ECODE 变量

    文章目录 第二章 Caché 变量大全 $ECODE 变量 大纲 描述 清除 `$ECODE` Setting $ECODE `$ECODE`字符串溢出 注意 创建自己的错误代码 第二章 Caché ...

最新文章

  1. .Net 中如何测试静态方法
  2. STM32 USART1 USART2 UASRT3 UART4 UART5串口通信测试程序
  3. Java 设计模式之模板方法模式
  4. 服务器里面发邮件,通过SMTP中继服务器发送邮件的问题
  5. python pandas csv读取_如何用 pandas 读取 csv 和 Excel 数据
  6. Jsp、Servlet
  7. android super this区别
  8. php项目导入其他包,将一个外部项目导入Thinkphp环境中
  9. java提供两种处理异常的机制_Java的异常机制分析及处理办法
  10. POJ 2478:Farey Sequence
  11. 关于U盘免疫的一些自我认识
  12. iNFTnews|Web3走进FIFA世界杯
  13. 我不是程序员! Just coding for fun!
  14. Unity 3D专栏 U3D预制包,很好很强大 (二)
  15. java语言的编译器_JAVA语言编译器是一个CASE工具。()。
  16. 宋宝华:linux内存中 swappiness=0究竟意味着什么?
  17. VB中给UInt32,UShort以16进制方式赋值编译不通过
  18. 基于 HTML+ECharts 实现物流大数据可视化平台(含源码)
  19. JAVA历险记--java基础知识--随堂笔记
  20. 软考高项 : (26)计算题汇总

热门文章

  1. ggplot2画histogram(坐标轴刻度值字体大小,坐标轴标题字体大小,柱形宽度,大标题字体大小、居中)...
  2. 【联盛德W806上手笔记】八、SPI及其DMA
  3. 开发板浮点型运算能力测试
  4. 移动端项目-黑马面面项目
  5. 出现make: *** No rule to make target `all'. Stop.解决办法
  6. [VCS]后仿真中的几个基本概念
  7. 数学成绩英语成绩c语言,用链表输入一个正整数n,再输入n 个学生的学号和数学,英语,C语言成绩,要求...
  8. 学生-课程数据库中的Student表中的学号属性为什么用英文Sno表示?
  9. Android常用存储类型与简介
  10. 论文阅读:U-Net++: Redesigning Skip Connections to Exploit Multiscale Features in Image Segmentation