Skip to content

变量与类型 ​

声明变量 ​

变量用 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 z64i8 i16 i32 i64有符号整数(zhengshu)
w8 w16 w32 w64u8 u16 u32 u64无符号整数(wufuhao)
f32 f64f32 f64浮点数,没有拼音别名
zhenjiabool布尔值:zheng / jia(真 / 假,true / false)
zifuchuanstring字符串,始终是合法的 UTF-8,见 字符串
zifurune一个 Unicode 字符
kongbaivoid无返回值,用于函数返回类型

复合类型:

写法说明
[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" 选项全局

cpro 目前处于测试阶段