变量与类型
声明变量
变量用 bl(变量 / var)声明,类型用 leixing(类型 / type)标注:
cpro
bl a = 9 // z64
bl b = 9.1 // f64
bl c leixing z32 = 9
bl d leixing zhenjia = zheng
bl s leixing zifuchuan = "你好"cpro
变量 a = 9 // i64
变量 b = 9.1 // f64
变量 c 类型 i32 = 9
变量 d 类型 bool = 真
变量 s 类型 string = "你好"cpro
var a = 9 // i64
var b = 9.1 // f64
var c type i32 = 9
var d type bool = true
var s type string = "你好"- 声明时必须初始化
- 必须先声明再使用
- 没写类型时由初值推断:整数默认
z64(i64),浮点数默认f64
基本类型
基本类型有拼音名和英文名,没有中文名,中文写法里沿用英文名。
| 拼音 | 英文 | 说明 |
|---|---|---|
z8 z16 z32 z64 | i8 i16 i32 i64 | 有符号整数(zhengshu) |
w8 w16 w32 w64 | u8 u16 u32 u64 | 无符号整数(wufuhao) |
f32 f64 | f32 f64 | 浮点数,没有拼音别名 |
zhenjia | bool | 布尔值:zheng / jia(真 / 假,true / false) |
zifuchuan | string | 字符串,始终是合法的 UTF-8,见 字符串 |
zifu | rune | 一个 Unicode 字符 |
kongbai | void | 无返回值,用于函数返回类型 |
复合类型:
| 写法 | 说明 |
|---|---|
[T; N] / [T] | 静态数组 / 动态数组,见 数组 |
kexuan(T)(可选(T) / optional(T)) | 可以为空的值,见 optional 空值 |
类型名和关键字一样,英文名和拼音名都不能用作变量名、函数名等名字。
数字字面量
字面量所在位置有确定类型时,字面量会收敛到这个类型:
cpro
hs add(a z32) kongbai {
bl b = a +[z32] 18 // 18 收敛为 z32
dayin(b)
}
rukou() {
add(15) // 15 收敛为 z32
}cpro
函数 add(a i32) void {
变量 b = a +[i32] 18 // 18 收敛为 i32
打印(b)
}
入口() {
add(15) // 15 收敛为 i32
}cpro
fn add(a i32) void {
var b = a +[i32] 18 // 18 收敛为 i32
print(b)
}
rukou() {
add(15) // 15 收敛为 i32
}cpro 没有八进制字面量,0755 请写成十进制 493。
类型转换
cpro 没有隐式类型转换,数值之间用 leixing_zhuanhuan(类型_转换 / type_conversion)显式转换。转换可能失败(例如超出范围),所以要写在 changshi(尝试 / try)里:
cpro
changshi {
bl a leixing z32 = leixing_zhuanhuan(10, z32)
dayin(a)
} buhuo (e) {
dayin(e.xinxi)
}cpro
尝试 {
变量 a 类型 i32 = 类型_转换(10, i32)
打印(a)
} 捕获 (e) {
打印(e.msg)
}cpro
try {
var a type i32 = type_conversion(10, i32)
print(a)
} catch (e) {
print(e.msg)
}数字和字符串之间的互转见 字符串。
选项:只读与全局
cpro
bl({ readonly: zheng }) a leixing z32 = 9 // 只读
bl({ scope: "global" }) b leixing z32 = 9 // 全局变量,只能写在文件顶层cpro
变量({ readonly: 真 }) a 类型 i32 = 9 // 只读
变量({ scope: "global" }) b 类型 i32 = 9 // 全局变量,只能写在文件顶层cpro
var({ readonly: true }) a type i32 = 9 // 只读
var({ scope: "global" }) b type i32 = 9 // 全局变量,只能写在文件顶层选项名 readonly、scope 在三种写法里都一样。
作用域
| 写法 | 作用域 |
|---|---|
| 函数或代码块内声明 | 块级,出块即销毁 |
| 文件顶层声明 | 模块级,当前模块私有 |
带 scope: "global" 选项 | 全局 |
