Caché ObjectScript Functions中$GET $G用法以及注意点

377 阅读1分钟

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

一点说明

首先在Caché ObjectScript Functions中方法是不分大小写的.所以$GET $G或者$get $g都是一样的。下文统一用$g

具体使用方法

$g的用法是返回变量的数据值

总共有以下三种用法:

1) 变量未定义

在变量未定义的情形下,$g返回空字符串。

此时$g其实相当于保护取值。比如在未定义的变量在引用过程中都会报 UNDEFINED错误:

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

通过$g保护一下就不会报错了。如下:

w $g(a)_"123",! //123 a未定义,但是没报错

2) 变量已定义

在变量已定义的情形下,$g返回指定变量的数据值。

特别注意的是:变量可以是任何变量。 如:

set ^b(1)=123
w $g(^b(1)),!   ///123

3) 设置数据值的默认值

这种用法允许变量的值为空的情况下,设置默认值。

如下所示:

w $g(c,234),! //234

$d的区别

  1. $d是判断变量的状态值
  2. $g是取变量的数据值
  3. 在变量未定义的情况下,$g的返回值是空字符串,$d的返回状态值是0,可以说在这种情形下,他们互为代替测试方案
  4. $d的返回状态值是10,即数组变量存在一个子节点值,但数组本身不存在(仅作为向下指针的元素 "elements that are downward pointers only")的情况下,$g的返回值还是空字符串。

综合第3,4点,可以看出$d的测试方案的情形更加具体明了。

set ^e(1)=345
if $d(^e)=10 do
.w "$d返回的状态值是10 ^e是没有数据的向下指针节点",!

if $g(^e)="" do
.w "$g返回的数据值是空字符串 ^e未定义",!

代码地址 test5