New命令

107 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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
}