用户定义变量(风飏@df32翻译版)
翻译自原文档:https://osdn.net/projects/emuera/wiki/UserVars
译者:风飏@df32
也可跳转至:原版
预处理指令#DIM
和#DIM
用来声明变量。
在函数定义中声明的变量为私有变量,只能在该函数中使用。 在头文件(ERH)中声明的变量为广域变量,可以从ERB脚本的任何位置中引用。
私有变量的书写格式
#DIM(S) <变量名>, <元素数> {,<元素数>{,<元素数>}}
在函数声明下,使用上述格式声明变量。
- <变量名> 与函数命名规则相同,以非数字的字符开始的任意字符串。
- <元素数> 100万以内的数字(默认为1),指定数组最多能访问的元素数量。
- 数组变量最高为3维。
- 数组变量可以访问<元素数>指定数量以内的元素。元素的初始值为0或空字符串。
#DIM
用于声明数值类型的变量,#DIMS
用于声明字符串类型的变量。
用#DIM(S)
声明的变量可以在函数声明中作为函数的参数使用,可以指定初始值。
@FIND_CSTR(KEY, VALUE = ‘’)
#FUNCTION
#DIM LCOUNT
#DIM KEY
#DIMS VALUE
SIF KEY < 0 || KEY >= VARSIZE("CSTR")
RETURNF -1
FOR LCOUNT, 0, CHARANUM
SIF LCOUNT == MASTER
CONTINUE
SIF CSTR:LCOUNT:KEY == VALUE
RETURNF LCOUNT
NEXT
使用#DIM(S)
声明的私有变量代替内置变量LOCAL(S)
可以提高代码的可读性。
定义初始值
一维数组变量在声明时,可以同时定义初始值。
若声明变量时省略数组的元素数,则数组变量的元素数将依据初始值的个数来定义。
若没有省略数组的元素数量,则会正常设置数组的元素数量。
若没有省略数组的元素数量,而初始值的个数大于元素数量,则会抛出错误。
;省略元素数量,HOGE元素数量3
#DIM HOGE = 1,2,3
;不省略元素数量,PUGE元素数量100
#DIM PUGE,100 = 4,5,6
;错误(初始值的数量超出指定的元素数)
#DIM HIGE,1 = 7,8,9
;也可以是字符串变量(由字符串表达式指定)。
#DIMS SHOGE = "A", "B", "C"
注意:不能在声明多维数组的同时定义其初始值。
动态变量
#DIM(S) DYNAMIC <变量名>,<元素数>
如果在变量名前加上DYNAMIC,声明的变量将被动态分配。
具体来说,在函数调用时保留,函数结束时,变量和其中的值消失。
(当使用RESTART
指令返回到函数的开始,动态变量并不会被重置)。
如果在一个函数中调用函数自己(递归),每次被调用时动态变量会被重新分配,因此递归行为是可靠的。
然而,动态变量比没有DYNAMIC
的变量(静态变量)运行速度更慢。
常量
当声明一维数组变量时,在变量名称前插入CONST
可以将其将定义一个一维常量数组。
与初始值一样,只有一维数组变量可以被定义。
常量在声明时必须定义初始值,不能通过替换来改变。
由于其性质,CONST
不能与GLOBAL
、SAVEDATA
、REF
和DYNAMIC
关键字一起使用。
数组中的元素数量可以不加说明,但如果元素数量与初始值的数量不一致,则会抛出错误。
;定义一个一维常量数组
#DIM CONST HOGE = 1,2,3
;错误(初始值的数量与元素数量不一致)。
#DIM CONST PUGE,100 = 4,5,6
;也可以是字符串变量(由字符串表达式指定)。
#DIMS CONST SHOGE = "A", "B", "C"
引用型变量
引用型变量通过在变量名称前使用REF
关键字来声明。
1~3维数值型和字符串型的声明分别如下:
#DIM REF HOGE1DIM,0
#DIM REF HOGE2DIM,0,0
#DIM REF HOGE3DIM,0,0,0
#DIMS REF PUGE1DIM,0
#DIMS REF PUGE2DIM,0,0
#DIMS REF PUGE3DIM,0,0,0
可以只写逗号,省略数字0
;如果是一维数组,可以省略逗号和0
。
引用型变量没有实体,REF
指令可以操作变量的引用(从ver1.815开始不可用)或用于函数传递引用参数。
关于函数传递引用参数的更多信息,请参阅函数--通过引用传递参数。
广域变量的书写格式
当#DIM(S)
在ERH头文件中使用时,#DIM(S)
不再是声明私有变量,而是在声明广域变量。 广域变量可以在任何ERB脚本的任何地方引用。
与私有变量不同,广域变量不存在DYNAMIC
和STATIC
的区别,也不能用REF
来定义引用类型的变量,但广域变量仍然可以用CONST
来定义常量。
在不属于DIM
的函数中,可以将保存的变量、全局变量和字符变量定义为函数。(?)
详情请见头文件(ERH)部分。
限制条件
不能使用与指令相同的名称
不可能声明一个与指令同名的变量,如下所示:
;报错
#DIM PRINTFORM
#DIM SELECTCASE
#DIM CALL
#DIM RETURN
#DIM GOTO
#DIM SQRT
#DIM DATAFORM
#DIM NOSKIP
#DIM FUNC
#DIM ENDFUNC
可以声明与函数/预处理器同名的变量,但不建议使用。
;不推荐
#DIM EVENTFIRST
#DIM COMF32
#DIM COMABLE15
#DIM SHOW_ABLUP_SELECT
#DIM DIM
#DIM PRI
#DIM ONLY
#DIM SKIPSTART
函数外的访问
与LOCAL@HOGE
的LOCAL
不同,私有变量无法从函数外部访问。