跳到主要内容
版本:release

索引表达式

语法

形式语法
1表达式 [ <? 表达式 ]
2表达式 [ <? 表达式 .. <? 表达式 ]
3表达式 . 标识符

描述

索引表达式用于从 arraymapbufferclass_map 类型的值中获取元素,或者访问定义在其他脚本中的常量。

如上所示,形式3 的索引表达式是形式1 的语法糖,其等价于:

[ ] 之间的表达式被称为 索引,如形式2 所示,可以使用 .. 和两个索引来表示一个索引范围内(包含两端) 的切片。

索引前可以跟随一个可选的 <,用于指示逆序索引:

array a = [10, 20, 30, 40, 50];
writeln(a[4]); // 50
writeln(a[<1]); // 也是50

索引规则

从不同类型的表达式进行索引操作时,索引类型和结果类型都各不相同:

被索引类型索引类型结果类型说明
arrayintmixed(如果是范围索引:array获取数组的元素/切片,索引越界将抛出异常。可以使用范围索引和逆序索引
mapmixedmixed用于获取指定键在 map 中的值,如果指定的索引不存在,得到 nil。不能使用范围索引和逆序索引
class_mapstring对应的字段类型用于获取 class_map 实例的成员值,如果指定的索引不存在,得到 nil。不能使用范围索引和逆序索引
bufferintint (如果是范围索引:buffer用于获取 buffer 指定位置的字节值(或切片),索引越界将抛出异常。可以使用范围索引和逆序索引
stringintint (如果是范围索引:string用于获取字符串指定位置的字符(或切片),索引越界将抛出异常。可以使用范围索引和逆序索引
string 字面量(应当是一个路径,指向某个 GS 脚本)string 字面量对应的常量类型从指定的脚本中获取常量值,该索引在编译期完成,如果常量不存在(或者指定的脚本不存在),抛出编译期错误

示例

array a = [10, 20, 30, 40, 50];
writeln(a[4]); // 50
writeln(a[<1]); // 也是50
writeln(a[1..3]); // [20, 30, 40]

map m = { "a": 10, "b": 20 };
writeln(m["a"]); // 10