跳到主要内容

类型系统

OSC2 是强静态类型语言。每个变量和表达式在编译时都有确定的类型。

基本类型

类型说明示例
bool布尔值true, false
int有符号 64 位整数42, -7, 0x0539
uint无符号 64 位整数42u
floatIEEE 754 双精度浮点数3.14, 1.0e4
stringUnicode 字符串"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) # 类型检查