====== Covariant Script 类型系统 ====== ----- <
> <> ===== 1.1 定义变量 ===== {{{#!highlight javascript var 变量名 = 表达式, 变量名 = 表达式... }}} '''定义一个或多个变量,初始值为表达式的值''' {{{#!wiki blue solid 注意,在 Covariant Script 中,定义变量时必须'''赋予初始值''' }}} {{{#!highlight javascript link 变量名 = 表达式, 变量名 = 表达式... }}} '''定义一个或多个引用,引用到表达式的值''' {{{#!highlight php constant 常量名 = 表达式, 常量名 = 表达式... }}} {{{#!wiki yellow solid '''[慎用] 定义一个或多个常量,其值为表达式的值''' }}} 常量和变量的处理方式完全不同,常量类似于 C++中的 constexpr 其实际上'''仅存在于编译期'''。使用常量将有利于提高性能,编译器在某些情况下也会自动进行常量折叠,但显式声明将帮助编译器更进一步优化您的程序 请'''尽量谨慎使用常量''',复杂常量的行为取决于实现 `CovScript`的变量系统中存在三种形式,分别为变量、引用和指针。变量和引用往往可以互相转化 ||'''形式'''||'''赋值(=)'''||'''绑定(:=)'''||'''声明方法'''|| ||<|3>变量||<|3>更改其内存区域的值||<|3>将变量绑定到其他内存区块上<
>当内存区块共享时,演变为引用||'''var'''语句|| ||'''new'''表达式|| ||引用退化|| ||<|3>引用||<|3>更改其引用到的区域的值||<|3>将引用绑定至其他内存区块上<
>当内存区块独立时,退化为变量||'''link'''语句|| ||函数参数|| ||变量演变|| ||<|2>指针||<|2>更改其指向的内存区块||<|2>视同变量||'''gcnew'''表达式|| ||取址('''&''')表达式|| 关于绑定的更多信息,参考[[reference.expression#3.3.2.1|绑定表达式]] ----- <
> <> ===== 1.2 number(数值)类型 ===== '''number''' 的字面量由 0~9 十个数和小数点组成,如 12,3.14 等 '''number''' 表示的数仅限于全体实数 '''number''' 的初始值为0 ----- <
> <> ===== 1.3 boolean(逻辑)类型 ===== '''boolean''' 的字面量只有两个,分别是 true(真)和 false(假) '''boolean''' 的初始值为 true(真) ----- <
> <> ===== 1.4 pointer(指针)类型 ===== '''pointer''' 没有字面量 '''pointer''' 指向存储在堆空间中的对象,可使用gcnew运算符新建一个堆上对象 '''pointer''' 的初始值为null(空指针),null(空指针)指向一个无意义的对象,不允许解引用一个空指针。不再使用的对象将由 GC(垃圾回收器)自动回收。可使用解引用运算符访问指针指向的对象,若指针指向的是结构体实例,可使用箭头运算符访问结构体的成员 {{{#!wiki blue solid 注意,'''小心环形引用行为''',这将造成不可预估的内存泄漏 }}} ----- <
> <> ===== 1.5 char(字符)类型 ===== '''char''' 的字面量是由单引号括起的单个字符,如'A', 'b', '+'等 特殊符号需使用转义序列来表示: || '''转义序列''' || '''符号''' || || \a || 响铃 || || \b || 退格 || || \f || 换页 || || \n || 换行 || || \r || 回车 || || \t || 水平制表 || || \v || 垂直制表 || || \\ || 反斜杠 || || \' || 单引号 || || \" || 双引号 || || \0 || 空字符 || '''char''' 的初始值为 ‘\0’(空字符) ----- <
> <> ===== 1.6 string(字符串)类型 ===== '''string''' 的字面量是由双引号括起的任意个数字符,如"Hello" '''string''' 的初始值为""(空串) 可使用下标运算符访问字符串中的字符,下标不能超出范围(字符串长度-1),小于零时即为倒序访问。多段字符串可以使用加运算符连接 字符串后可跟字面量名,如"0xff"hex,称为字符串字面量。用法详见[[reference.build-in_types#3.1.5|注册字面量【待修复】]] 可以使用 to_string() 函数将其他类型转换至字符串: ||类型||规则|| ||'''number'''||按字面量转换,精度遵循iostream.setprecision【待修复】的设置|| ----- <
> <> ===== 1.7 array(数组)类型 ===== '''array''' 的字面量为大括号扩起的以逗号分隔的任意个数元素,如 {1,2,3} '''array''' 是一种元素均匀分布的顺序容器,初始值为{}(空数组) 可使用下标运算符访问数组中的元素,下标小于零时即为倒序访问 Covariant Script 编程语言的数组是变长数组(VLA),若下标超出范围数组将自动增长,增长的部分自动填0 ----- <
> <> ===== 1.8 list(线性表)类型 ===== '''list''' 没有字面量 '''list''' 是一种元素不均匀分布的顺序容器 '''list''' 的初始值为空表 ----- <
> <> == 1.9 pair(映射)类型 == '''pair''' 的字面量为冒号对应的一个键值对,如2:3 '''pair''' 的初始值为0:0(空映射) ----- <
> <> ===== 1.10 hash_map(哈希)映射类型 ===== '''hash_map''' 没有字面量 '''hash_map''' 是一种元素均匀分布的无序容器 '''hash_map''' 要求其存储的映射的键的类型必须支持生成哈希值 '''hash_map''' 的初始值为空表 可使用下标运算符访问散列表中的键对应的值,若键不存在,将自动建立键与0组成的映射。 也可以使用点运算符访问散列表中的字符串键对应的值,如与散列表扩展函数冲突则被忽略,若键不存在将触发运行时错误 例如,map[“hello”] 可使用 map.hello 代替,但 map.hello 不会自动新建映射,而 map[“hello”] 会。