命令后置条件表达式

110 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第40天,点击查看活动详情

命令后置条件表达式

  • 后置条件是附加到命令或控制Caché是否执行该命令或命令参数的命令参数的可选表达式。如果后置条件表达式的计算结果为TRUE,则Caché将执行命令或命令参数。决定Caché是否执行该命令或命令参数。后置条件表达式的计算结果为FALSE,则Caché不执行命令或命令参数,并从下一个命令或命令参数继续执行。
  • 除了控制流命令(IFELSEIFELSEFORWHILEDO WHILE)和块结构错误处理命令(TRYTHROWCATCH)之外,所有ObjectScript命令都可以采用后置条件表达式。(后置表达式是可选的)
  • 如果命令关键字和该命令一个或多个参数都指定了后置条件,则首先计算关键字的后置表达式。
  • 要向命令添加后置条件,请在COMMAND关键字后面紧跟一个冒号(:)和表达式,以便具有后置条件表达式的命令的语法为:
    Command:pc
	s count = 4
	w:count<5 "count < 5",!
	s count = 6
	w:count>5 "count > 5",!

赋值命令

  • SET为变量赋值。
  • KILL删除为变量赋值的操作。
  • NEW为变量赋值建立新的上下文。
  • MERGE将全局变量节点或多维数组合并到目标变量。
  • ZKILL删除节点,同时保留该节点的子代。

Set命令

set命令为变量赋值。它可以为单个变量赋值,也可以同时为多个变量赋值。

如果指定的变量不存在,则SET会创建该变量并赋值。如果存在指定的变量,则SET将用指定的值替换先前的值。由于SET按从左到右的顺序执行,因此可以为一个变量赋值,然后将该变量赋值给另一个变量。

  • set的最基本语法是:
    SET variable = expression
    //将yx变量的值设置为yaoxin
    s yx = "yaoxin"
  • 要设置多个变量中每个变量的值,请使用以下语法:
    SET variable1 = expression1, variable2 = expression2, variable3 = expression3
    //设置多个变量中每个变量的值
    s yx = "yaoxin", yx1 = "yao", yx2 = "xin", 
  • 通过单次调用set a=value、b=value、c=value、...,可以执行的赋值次数没有限制。

  • 要将多个变量设置为等于单个表达式(效率最高),请使用以下语法:

    SET (variable1,variable2,variable3)= expression
    //同时设置yx, yx1, yx2的置为yaoxin
    s (yx, yx1, yx2) = "yaoxin" 
  • 单次调用set(a,b,c,...)=value可以执行的最大赋值数量是128。超过此数字会导致<SYNTAX>错误。

  • 可以使用set调用返回值的方法。

    // 其中ClassMethodName()是要调用的类方法的名称,ClassName是包含方法的类的名称,PackageName是包含类的包的名称。该方法的返回值被赋给retval局部变量。##class()构造是代码中必需的文字部分。
    SET retval = ##class(PackageName.ClassName).ClassMethodName()
    //当前电脑的名称为LAPTOP-ARLL3DSO
    s x = ##class(%SYS.System).GetNodeName()
  • 可以赋值JSON对象和数组。
    //赋值JSON对象
    s json = {"name":"yaoxin","age":31,"gender":"男"}
	q json.%ToJSON()
     //赋值JSON数组
    s json = ["yaoxin",31,"男"]
	q json.%ToJSON()
    //嵌套JSON
	s json = {"name":"yaoxin","age":31,"gender":"男","row":["yaoxin",31,"男"]}
	q json.%ToJSON()
  • 可以将$PIECE$EXTRACT函数与等号两侧的SET一起使用。当在等号的右侧使用时,$PIECE$EXTRACT从变量中提取子字符串,并将其值分配给等号左侧的指定变量。$PIECE使用指定的分隔符提取子字符串,而$EXTRACT使用字符计数提取子字符串。
	s A = "1^2^3^4^5^6^7^8^9"
	s $p(A, "^") = "abc"
	w !,"A = ",A
	s A = "123456789"
	s $e(A) = "abc"
	w !,"A = ",A