持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第42天,点击查看活动详情
使用参数传递的KILL影响
- 引用传递变量,执行
kill并将变量包含在列表中,也会kill相应的实际变量。当函数或子例程终止时,实际变量将不再存在。
ClassMethod Kill5()
{
s a = "yx"
w !,"执行sub之前: ", $data(a)
d sub(.a)
w !,"执行sub之后: ", $data(a)
q
sub(&x)
w !,"k之前 x: ", $data(x)
k x
w !,"k之后 x: ", $data(x)
q
}
- 通常不应该
kill形参列表中指定的变量。当Caché遇到使用参数传递(无论是通过值传递还是通过引用传递)的函数或子例程时,它会隐式地为形式列表中的每个变量执行一个new命令。当它退出函数或子例程时,它会隐式地为形式列表中的每个变量执行kill命令。在使用按引用传递的形式变量的情况下,它在执行kill之前更新相应的实际变量。
Zkill命令
ZKILL命令删除指定数组节点的值,而不会杀死该节点的后代。相反,kill命令删除指定数组节点的值以及该节点的所有子代。数组节点可以是局部变量、进程私有变量或全局变量。
ClassMethod Kill6()
{
k a, ^b, ^||c
s a = "food", a(1) = "fruit", a(2) = "vegetables"
s a(1, 1) = "apple", a(1, 1, 1) = "pear", a(1 ,2) = "banana"
s a(2, 1) = "watermelon"
s ^b = "food", ^b(1) = "fruit", ^b(2) = "vegetables"
s ^b(1, 1) = "apple", ^b(1, 1, 1) = "pear", ^b(1 ,2) = "banana"
s ^b(2, 1) = "watermelon"
s ^||c = "food", ^||c(1) = "fruit", ^||c(2) = "vegetables"
s ^||c(1, 1) = "apple", ^||c(1, 1, 1) = "pear", ^||c(1 ,2) = "banana"
s ^||c(2, 1) = "watermelon"
w "k之前",!
zw a, ^b, ^||c
zkill a(1), ^b(2), ^||c(1,1)
w "k之后",!
zw a, ^b, ^||c
}
new命令创建一个新的局部变量上下文。它在旧上下文中保留现有的局部变量值,然后启动一个新的上下文,在新上下文中没有为局部变量赋值。在使用应用程序中,使用NEW初始化整个应用程序或应用程序的主要子系统的变量。
NEW最常在do命令调用的例程或方法中使用。一般在方法开头使用初始化变量。
ClassMethod ProcedureBlock()
{
for i = 1 : 1: 5{
d ..ProcedureBlock1("this is a String")
}
}
ClassMethod ProcedureBlock1(var)
{
n (var)
w var,!
w "这是Not ProcedureBlock",!
s i = 2
}