文章目录

第三十四章 Caché 命令大全 ZKILL 命令

删除节点,同时保留该节点的子代。

大纲
ZKILL:pc array-node,...
ZK:pc array-node,...

参数

  • pc - 可选-后置条件表达式。
  • array-node 局部变量、进程私有全局变量或作为数组节点的全局变量,或局部、进程私有全局变量或全局数组节点的逗号分隔列表。
描述

ZKILL命令删除指定数组节点的值,而不会杀死该节点的后代。相反,kill命令删除指定数组节点的值以及该节点的所有子代。数组节点可以是局部变量、进程私有变量或全局变量。

默认情况下,任何后续对此已终止数组节点的引用都会生成一个<unfined>错误。通过设置%SYSTEM.Process.Unfined()方法,可以更改Caché 行为,使其在引用未定义的下标变量时不生成<unfined>错误。

参数

pc

可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行该命令。如果后置条件表达式为假(计算结果为零),则Caché不执行该命令。

array-node

本地、进程专用全局变量或全局数组节点。可以指定单个数组节点,也可以指定逗号分隔的数组节点列表。尝试对结构化系统变量(SSVN)(例如^$GLOBAL)使用ZKILL会导致<command>错误。

示例

在本例中,ZKILL命令删除节点a(1),但不删除节点a(1,1)

/// d ##class(PHA.TEST.Command).TestZKill()
ClassMethod TestZKill()
{
    SET a(1)=1,a(1,1)=11
    SET x=a(1)
    SET y=a(1,1)
    ZKILL a(1)
    SET z=a(1,1)
    WRITE "x=",x," y=",y," z=",z
}

返回x=1 y=11 z=11

DHC-APP>d ##class(PHA.TEST.Command).TestZKill()
x=1 y=11 z=11

。但是,然后发出:

WRITE a(1)
DHC-APP 2d1> d ##class(PHA.TEST.Command).TestZKill()
x=1 y=11 z=11
    WRITE a(1) }
    ^
<UNDEFINED>zTestZKill+7^PHA.TEST.Command.1 *a(1)

生成<UNDEFINED>错误。

对比KILL

/// d ##class(PHA.TEST.Command).TestZKillK()
ClassMethod TestZKillK()
{
    SET a(1)=1,a(1,1)=11
    SET x=a(1)
    SET y=a(1,1)
    KILL a(1)
    SET z=a(1,1)
    WRITE "x=",x," y=",y," z=",z
}

DHC-APP>d ##class(PHA.TEST.Command).TestZKillK()
 
    SET z=a(1,1)
    ^
<UNDEFINED>zTestZKillK+5^PHA.TEST.Command.1 *a(1,1)