变量

来自RustedWarfare Wiki

变量是铁锈中一种数据存储方式,于1.14被加入。

不同于内存,变量的值是固定的,在ini中定义后无法修改。

定义

在非注释节,使用@global 名称:值可以定义全局变量,不过请注意它在复制时会由重排序导致值错误,诺要避免请按照规范将它放在core节上。
@define 名称:值定义局部变量

变量定义例子
[core]
@global a:100
@global b:qwerty
[action_x]
@define c:10.0

类型

铁锈中,变量包含全局变量局部变量两种,其作用域不同。全局变量在整个ini中都能进行引用,而局部变量只能在定义该变量的节引用。同一个单位中不同的节可以定义名称相同的局部变量,而互不影响。当全局变量和局部变量重名时,局部变量优先级更高,能够在该局部变量所处的节覆盖全局变量。变量本身并不存在“数据结构类型”,本质上变量只是一个替换工具,在加载时引用的变量被替换为定义的值。

局部变量和全局变量例子
[core]
@global a:10
@global b:20
[action_a]
@define a:15
#此时 ${a} 为 15
[action_b]
#此时 ${a} 为 10
#此时 ${b} 为20

引用

通过${变量名}可以引用变量。任何代码的值中都可以进行变量引用,但是必须保证该代码值的类型在引用后不会错误。%{}中也可以嵌套变量引用。

通过${core.price},可以引用core节的price键,若节为section则指向自己,这包含复制的节,但是有些复制实现在序列化完成后,这是不可引用的。


引用支持多个值进行替换,不过值必须满足匹配式[a-zA-Z_][0-9a-zA-Z_.]*,且不能为运算函数。


请注意${\s*(.*)\s*}是它的有效范围,不要在外圈填充空格。

变量引用例子
[core]
price:6
[action_a]
pos:1
@define str1:测
@define str2:试
#${core.price}==6
#${section.pos}==1
text:${str1}${str2}
#此时text的值为“测试”
#${str1 str2}==“测 试”

数学运算

${}支持使用double进行以下数学运算,不过它存在运算优先级问题,建议运算式加上(),运算函数不一定需要()

  1. +-*/^()
  2. sqrt
  3. int
  • rad/弧度
  1. sin
  2. cos
  • 例子
  1. ${1+(2*2)}==5
  2. ${sqrt(4)}==2
  3. ${int 1}==1
  4. a=1,b=2 ${a+b}==3

请注意如果你不想进行数学运算,那么替换式不要包含“+-*/^()”其中的任何一个。