Caché ObjectScript Functions中$DATA $D用法以及注意点

241 阅读1分钟

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

一点说明

首先在Caché ObjectScript Functions中方法是不分大小写的.所以$DATA $D或者$data $d都是一样的。下文统一用$d

具体使用方法

$d的用法是检查变量并返回状态值,所以先看状态值也能理解$d的用法

1) 状态值 0,表示变量未定义

而未定义的变量在引用过程中都会报 UNDEFINED错误,如下:

w t_"123",! //变量t未定义

2) 状态值 1,表示变量存在并且有数据

需要指出的是空字符串""也是有数据的,如下:

set b=""$d(b),! //1

3) 状态值 10,表示数组变量存在一个子节点值,但数组本身不存在,任何引用数组本身都会报UNDEFINED错误

这个不常用,我也是今才搞明白,下面是代码示例:

set ^c(5)="123"
w $d(^c),! //10

4) 状态值 11,表示数组变量存在一个子节点值,数组本身也存在,任何引用数组本身都是可以的

这种情形在判断数组是否还需要继续取子节点值的时候很好用。

set ^d(5)="123"
set ^d(5,1)="456"
w $d(^d(5)),! //11 说明^d(5)还有子节点数据

$DATA 相关函数

  • $GET
  • $ORDER 由于$ORDER遍历数组中的下一个元素,所以使用$DATA检查数据是很有必要的。

实际应用中

代码图示如下: 关于状态1011的应用如下:

设置一个具有子节点的数组set ^e(1)="12",但数组^e本身不存在(w),此时状态为10;而在遍历数组时(zw),数组是具有子节点数据的,此时状态为11.

image.png

整体代码如下:

image.png