目录
- //输出Error
- set x = y
变量分为:局部变量、百分比变量、ProcedureBlock、进程私有全局变量、全局变量、数组变量、特殊变量
- ClassMethod MyFunction()
- {
- set num = 1
-
- //开启事务
- ts
- set num = 2
- //回滚
- tro
-
- // 输出2
- w num,!
- }
- ClassMethod MyFunction3()
- {
-
- set abcabcdwewesssyygsoshbsdvv2233a = 1
- set abcabcdwewesssyygsoshbsdvv2233ab = 3
-
- // 输出3
- w abcabcdwewesssyygsoshbsdvv2233a
- // 输出3
- w abcabcdwewesssyygsoshbsdvv2233ab
- }
- /// d ##class(Demo.Test).MyFunction1()
- ClassMethod MyFunction1()
- {
- set %za = "a"
-
- // 输出a
- w %za
- }
- Class Demo.Test Extends %RegisteredObject
- {
-
- /// d ##class(Demo.Test).MyFunction1()
- ClassMethod MyFunction1()
- {
- set num = 1
- set %za = "a"
-
- w %za,!
- w num,!
- }
-
- /// d ##class(Demo.Test).MyFunction2()
- ClassMethod MyFunction2()
- {
- w %za,!
- w num,!
- }
-
- }
程序的运行结果如下所示:
- DHC-APP>d ##class(Demo.Test).MyFunction2()
- d ##class(Demo.Test).MyFunction2()
- ^
- DHC-APP>d ##class(Demo.Test).MyFunction1()
- a
- 1
- DHC-APP>d ##class(Demo.Test).MyFunction2()
- a
- w num,! }
- ^
zMyFunction2+3^Demo.Test1.1 *num
- q:($data($zconfig))
-
- set %zconfig = ##class(xx).xx()
如下所示:默认情况下,创建的类中都是包含了ProcedureBlock
- Class Demo.Test Extends %RegisteredObject
- {
-
- /// d ##class(Demo.Test).MyFunction1()
- ClassMethod MyFunction1()
- {
- for i=1 : 1 : 5{
- d ..MyFunction2()
- }
- }
-
- ClassMethod MyFunction2()
- {
- set i = 2
- w "i="_i_",this is a not procedureblock",!
- }
- }
执行命令d ##class(Demo.Test).MyFunction1(),打印结果如下:只打印5次:i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
由此可见,默认情况下,在方法中创建的所有变量都是私有变量(方法互相之间不能访问)。
如果给类定义了Not ProcedureBlock后,如下所示:
- Class Demo.Test Extends %RegisteredObject [ Not ProcedureBlock ]
- {
-
- /// d ##class(Demo.Test).MyFunction1()
- ClassMethod MyFunction1()
- {
- for i=1 : 1 : 5{
- d ..MyFunction2()
- }
- }
-
- ClassMethod MyFunction2()
- {
- set i = 2
- //程序会陷入死循环,一直不停输出:i=2,this is a not procedureblock
- w "i="_i_",this is a not procedureblock",!
- }
- }
调用d ##class(Demo.Test).MyFunction1(),会一直不停的打印:i=2,this is a not procedureblock,MyFunction2()中修改了MyFunction1()中变量i的值
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
i=2,this is a not procedureblock
......
- set ^||num = 2
- set ^||name = "Jack"
- ClassMethod MyFunction2()
- {
- kill ^||num
- set ^||num = 2
- //输出^||num = 2
- zw ^||num
- //输出2
- w ^||num
-
- //切换命名空间
- set $namespace = "DHC-APP"
- //输出^||num = 2
- zw ^||num
- //输出2
- w ^||num
- }
- /// d ##class(Demo.Test).MyFunction6()
- ClassMethod MyFunction6()
- {
-
- set ^||num = 1
- d ..MyFunction7()
- }
-
- ClassMethod MyFunction7()
- {
- //输出1
- w ^||num
- }
- ClassMethod MyFunction()
- {
- set ^||num = 1
-
- //开启事务
- ts
- set ^||num = 2
-
- //回滚
- tro
- w ^||num,!
- }
- ClassMethod MyFunction3()
- {
-
- set ^||abcabcdwewesssyygsoshbsdvv2233a = 1
- set ^||abcabcdwewesssyygsoshbsdvv2233ab = 3
-
- // 输出3
- w ^||abcabcdwewesssyygsoshbsdvv2233a
- // 输出3
- w ^||abcabcdwewesssyygsoshbsdvv2233ab
- }
- ClassMethod MyFunction4()
- {
- //定义局部变量
- set myLocal = "这是局部变量"
-
- //定义全局变量
- set ^myGlobal = "这是存储在当前命名空间的全局变量"
-
- //输出^myGlobal="这是存储在当前命名空间的全局变量"
- zw ^myGlobal
- }
- ClassMethod MyFunction9()
- {
- set ^myGlobal = 1
-
- ts
- set ^myGlobal = 2
- tro
-
- //输出^myGlobal=1
- zw ^myGlobal
- }
- ClassMethod MyFunction10()
- {
- set ^abcabcdwewesssyygsoshbsdvv2233a = 1
- set ^abcabcdwewesssyygsoshbsdvv2233ab = 2
-
- //输出^abcabcdwewesssyygsoshbsdvv2233a=2
- zw ^abcabcdwewesssyygsoshbsdvv2233a
- //输出^abcabcdwewesssyygsoshbsdvv2233a=2
- zw ^abcabcdwewesssyygsoshbsdvv2233ab
- }
- ClassMethod MyFunction11()
- {
- //定义局部变量
- set xy = 1
- //定义百分比变量
- set %xy = 2
- //定义进程私有全局变量
- set ^||xy = 3
- //定义全局变量
- set ^xy = 4
-
- //输出xy=1
- zw xy
- //输出%xy=2
- zw %xy
- //输出^||xy=3
- zw ^||xy
- //输出^xy=4
- zw ^xy
- }
局部变量(效率最高)、进程全局变量、全局变量。百分比变量看情况使用
- //级别数为3
- set ^||xy("a","b","c") = 2
- //数组变量
- set ^x(1) = 1
-
- //下标变量
- set ^x("a") = 2
- //下标变量
- set color("red") = "red"
- ClassMethod MyFunction12()
- {
- //输出66330,71864
- w $Horolog,!
- /*
- 输出版本号:Cache for Windows (x86-64) 2016.2
- (Build 736_0_16871U) Wed Dec 21 2016 09:38:49 EST
- */
- w $zversion
- }
与对象的特定实例相关联并存储在其中的值
- Class Demo.First Extends %RegisteredObject
- {
-
- /// 声明属性
- Property name As %String;
-
- /// d ##class(Demo.First).Variable()
- ClassMethod Variable()
- {
- /// 初始化一个对象
- set obj = ..%New()
- /// 设置属性值
- set obj.name = "Jack"
-
- //输出Jack
- w obj.name
- }
-
- }
如下所示:
| from | to | 规则 |
| Number | String | 使用表示数字值的字符串,例如“2.6” |
| String | Number | 字符串的前导字符串被解释为数字文字,例如"-6.21abs34"被解释为-6.21,而"ab2sc22"被解释为0 |
| Object | Number | 使用给定对象引用的内部对象实例编号,该值为整数 |
| Object | String | 使用n@cls形式得字符串,其中n是内部对象实例编号,cls是给定对象的类名
|
| Number | Object | 不允许 |
| String | Object | 不允许 |