作者

Sales Engineer at InterSystems
文章 Jingwei Wang · 八月 25, 2021 4m read

Object Script 基础知识(二)

Object Script(二)

ObjectScript没有定义任何保留字:你可以自由地使用任何字作为标识符(如变量名)。为了达到这个目的,ObjectScript使用了一组内置的命令以及特殊的字符(比如函数名的"$"前缀),以便将标识符与其他语言元素区分开来。

示例

含义

abc^def

调用routine中的一个标签:

def是一个routine,abc是该routine中的一个标签。

i%abcdef

i%<PropertyName>

用于从实例变量自身的Get或Set访问器方法中引用该变量,或者绕过其Get或Set方法

abc->def

这种语法只在InterSystems的SQL语句中可以使用。它指定了一个隐含的左外连接。abc是你正在查询的类中的一个对象值字段,def是子类中的一个字段。

abc?def

一个问号是模式匹配操作符,测试变量abc中的值是否与def中指定的模式相匹配

abc[def

左括号([)是二进制包含运算符。这个表达式检测字符串"abc "是否包含字符串 "def"

abc]def

右括号(])是二进制跟随运算符。这个表达式检测字符串"abc "是否在字符串 "def "之后,以ASCII的顺序排列。

abc]]def

两个右括号(]])是二进制排序运算符。这个表达式检测字符串 "abc "是否排在字符串 "def "之后,以数字下标排序。

..

相对点语法,两个句号组成,是一个类成员内部对另一个类成员的引用的开始。或者用于访问当前对象的一个属性或调用一个方法

##Class()

用于调用一个类的方法,将一个对象引用转换为另一个类来调用一个方法,或者用于访问一个类参数的值。

##super

用于从子类方法中调用父类方法

$abc

系统变量或自定义变量

$abc()

系统函数或者自定义函数,括号中可用逗号分隔参数

$abc.def.ghi(xxx)

$abc是$SYSTEM,def是%SYSTEM包中的类的名称,ghi是该类中一个方法的名称,xxx是该方法的一个可选的逗号分隔的参数列表

$SYSTEM%SYSTEM包的别名,用来提供对该包中类的方法的访问

$$abc

abc是一个宏,美元符号不是其名称的一部分

$$abc()

是一个定义在包含此引用的routine或函数中的子程序。这种语法调用子程序abc并获得其返回值

%abc

InterSystems IRIS系统类中的大多数包、类和方法都以百分号开头。也有可能是InterSystems IRIS设置的一个局部变量,Routine或者嵌入SQL变量

%%abc

有关于InterSystems SQL,是伪字段的关键字

^abc

一个函数或者一个执行程序(Roution),也可表示为全局参数

^$abc

结构化的系统变量

^||abc

进程私有的全局参数,是一个用于临时存储大数据值的机制

^[XXX]%abc

对另一个名字空间中的全局或例程的引用

 

变量/函数/类

含义

$SYSTEM

提供系统信息

$HOROLOG 

当前进程的日期和时间

$zv

系统版本信息

$ZDH()

用于检验日期格式,并将可读的日期格式转换成InterSystems IRIS 数据库可读格式

$zd()

用于检验日期格式,并将InterSystems IRIS数据库日期格式转换成可读的日期格式。

示例:

字符串类型与日期类型相互转换:$ZDH/$ZD

w $ZDH("2017-03-13",3)
w $zd(0)

$Random(range)

返回符合范围内的随机正整数

$zlog()

Log指数计算

$zsqr()

平方根计算

$Case

根据第一个参数,可以返回相关的值,类似于Switch case。或者返回一个procedure或者一个routine

示例:

s x =2
w $CASE(x,1:"single",2:"double",3:"triple",:"input error") 

 

本地数组:生命周期在当前进程

      SET a(1) = "A local variable array"

              SET a(1,1,1) = "Another local variable array"

全局数组:持久化数组,直接存于磁盘

              SET^||a(1) = "A process-private global array"

              SET^a(1) = "A global array"