使用参数传递的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 }