类型系统
OSC2 是强静态类型语言。每个变量和表达式在编译时都有确定的类型。
基本类型
| 类型 | 说明 | 示例 |
|---|---|---|
bool | 布尔值 | true, false |
int | 有符号 64 位整数 | 42, -7, 0x0539 |
uint | 无符号 64 位整数 | 42u |
float | IEEE 754 双精度浮点数 | 3.14, 1.0e4 |
string | Unicode 字符串 | "hello", 'world' |
枚举
使用 enum 定义枚举类型:
enum color: [red, green, blue]
enum status: [active = 1, inactive = 0]
my_color: color = color!red
物理类型与单位
OSC2 内置完整的物理量系统,基于 SI 国际单位制:
type speed is SI(m: 1, s: -1)
unit kmh of speed is SI(m: 1, s: -1, factor: 0.27777777778)
常用物理类型可直接使用:
distance: length = 100m
duration: time = 30s
v: speed = 60kph
acc: acceleration = 2.0 mpss
angle_val: angle = 45deg
支持的单位示例:
| 物理量 | 单位 |
|---|---|
| 长度 | nm, mm, cm, m, km |
| 时间 | ms, s, min, h |
| 速度 | mps, kph/kmh, mph |
| 加速度 | mpss, kmphps |
| 角度 | deg, rad |
| 质量 | g, kg, ton |
| 温度 | K, C, F |
结构体
使用 struct 定义复合类型:
struct point_2d:
x: length
y: length
角色 (Actor)
角色是场景中的参与者,使用 actor 声明:
actor vehicle:
length: length
width: length
max_speed: speed
color: string
继承
类型可以继承:
struct truck inherits vehicle:
cargo_weight: mass
扩展
使用 extend 为已有类型添加新字段:
extend vehicle: is_electric: bool
列表
colors: list of string = ["red", "green", "blue"]
first: string = colors[0]
count: int = colors.size()
类型转换
x: float = 42 # int → float 隐式转换
my_color: color = 1.as(color) # 显式转换
is_vehicle: bool = obj.is(vehicle) # 类型检查