语法快速一览
这篇文章中每一条语法都能在对应章节找到完整说明,本页只作速查,可以去对应章节查看完整内容。
// ── 绑定与基础值 ────────────────────────────────────────────
val a = 1; // 不可变
var b = 2; // 可变
b = b + 1;
const K = 42; // 编译期常量
val n: int = 0xff; // 整数八族:int8..int64 / uint 家族;0x / 0b / 0o 前缀
val f: float = 1.5e3; // 二进制浮点:float / f64 / f16
val ok: bool = true;
val c: char = '甲'; // 单引号,一个字形簇
val s = "text \n escape"; // 双引号字符串带转义
val raw = r"C:\path {原样}"; // raw 串:不转义、插值可选
val wait = 1.5s + 500ms; // 时间值:us / ms / s / min / hr
val v = vec2(1.0, 2.0); // 向量:vec2..vec4 / vec2i..vec4i / color
val col = #ff8000ff; // 颜色字面量
val x = v.x; // swizzle:x/y 或 r/g/b 直接取分量
print($"插值 {s} 与 {n * 2},对齐 [{f,10}]");
// ── 容器 ───────────────────────────────────────────────────
val xs: list<int> = [1, 2, 3]; // 列表
val uniq: set<int> = [1, 2, 2]; // 去重集合
val arr = [4, 5, 6]; // 数组
val buf = new int[3]; // 按长度分配
val filled = new int[5](i => i * i); // 工厂形:逐槽调用
val m = new map<string, int>(); // 映射
m["金"] = 1;
xs.Add(4); // 尾部追加
xs[0] = 9; // 索引器写
print(xs.Count, m["金"], arr.Length);
val evens = xs.Where(x => x % 2 == 0); // 高阶方法:Where / Map / Filter / Reduce
// ── 控制流 ─────────────────────────────────────────────────
if n > 0
{
print("正");
}
elif n < 0
{
print("负");
}
else
{
print("零");
}
val sign = if n > 0 { "正" } else { "非正" }; // if 表达式
if val first = xs.Get(0) // 条件绑定
{
print(first);
}
match n
{
0 => print("零"),
x when x < 0 => print("负"), // 守卫
_ => print("其他"),
}
for x in xs // for-in
{
print(x);
}
for i in 0..10 { } // 半开区间;闭区间写 1..=10
for i in 1..=6 when i % 2 == 0 { } // 循环守卫
while b < 100 { b = b * 2; }
while val w = maybe // 条件绑定循环:null 即退出
{
b = b + w;
}
repeat 3 { print("三遍"); }
for i in 1..=3 label outer { break outer; } // 标签定向跳转
defer { print("作用域退出时逆序执行"); } // 清理钩子
// ── 函数 ───────────────────────────────────────────────────
func Add(a: int, b: int) -> int
{
return a + b;
}
func Greet(name: string, punct: string = "!") -> string // 默认参数
{
return $"你好,{name}{punct}";
}
Greet("世界", punct: "。"); // 命名实参
func Swap(ref a: int, ref b: int) { } // ref 写回;out 仅写回
func Total(params nums: int[]) -> int { } // 变参:Total(1, 2, ...xs)
func Show(v: int) -> string => $"int {v}"; // 表达式体
func Show(v: string) -> string => $"string {v}";// 重载:按实参类型解析
func Max<T>(a: T, b: T) where T: Ordered -> T // 泛型与约束
{
return a < b ? b : a; // 三元
}
// ── lambda 与管道 ──────────────────────────────────────────
val square = (x: int) => x * x; // lambda
val added = (a: int, b: int) fail Bad => a + b; // failable lambda
xs.Map(x => x * 2);
val total = xs
|> Where(x => x % 2 == 0) // 管道:左值自动插首参
|> Map(square)
|> Reduce((acc, x) => acc + x, 0);
val safe = maybe ?|> Wrap; // 判空管道:null 即短路
val tried = input |>? Load; // 容错管道
val must = input |>! Load; // 传播管道
// ── 自定义类型 ──────────────────────────────────────────────
struct Pt
{
public val x: int;
public val y: int;
init(x: int, y: int)
{
self.x = x;
self.y = y;
}
}
class Animal
{
public virtual func Speak() -> string => "...";
}
class Dog : Animal // 单继承;: base(n) 链构造器
{
public override func Speak() -> string => "汪";
}
data Item { label: "text" } // data:类型即值
data Sword
{
...Item, // 展开合并
name: "铁剑",
}
enum Color { Red, Green, Blue }
enum Shape { Circle(radius: float), Rect(w: float, h: float), Point }
flags Perm { Read, Write, Execute = 16 } // 标志位
val p = Perm.Read | Perm.Write;
protocol Greeter { func Hello() -> string; }
class Robot impl Greeter // 协议实现
{
public func Hello() -> string => "beep";
}
mixin Noisy { public func Noise() -> string => "boom"; }
class Machine with Noisy { } // 混入:编译期成员克隆
extension int // 扩展:为既有类型注入成员
{
public func Squared() -> int => self * self;
}
class Meter
{
public var value: int = 0;
public computed prop Double: int => self.value * 2; // 派生读
public prop Level: int // 显式访问器
{
get => self.value / 10;
set { self.value = value * 10; }
}
}
val frozenList = freeze([1, 2, 3]); // 深冻:完全只读
// ── 失败与消费 ──────────────────────────────────────────────
error NotFound(key: string); // 错误声明
func Load(key: string) fail NotFound -> int // fail 子句
{
if key == ""
{
fail new NotFound(key); // 抛出错误值
}
return key.Length;
}
val soft = try? Load(""); // 失败得 null
val hard = try! Load("x"); // 断言成功,失败即崩
val r = capture Load(""); // 收成 result 值
recover r
{
Success(v) => print(v),
Failure(e) => print(e.key), // 错误载荷直读
}
crash new NotFound("无路可走"); // 带错崩退
// ── 异步 ───────────────────────────────────────────────────
async func Fetch() -> string
{
await 1s;
return "数据";
}
val job = spawn // 并发跑
{
await 0.5s;
};
cancellable async func Work() -> int // 可取消:cancel.requested 协商
{
if cancel.requested
{
return -1;
}
return 42;
}
// ── 事件 ───────────────────────────────────────────────────
event Ticked(n: int); // 事件声明
func OnTick(n: int) { print(n); }
Ticked ~> OnTick; // 订阅
Ticked !~> OnTick; // 退订
emit Ticked(1); // 发射
// ── 特性与反射 ──────────────────────────────────────────────
attribute Doc(text: string) targets type, method;
@Doc("示例类型") // 应用
class Widget { }
val t = typeof(Widget);
print(t.Attrs()[0].Args()["text"]); // 反射读取特性
print(Reflect.TypeOf(1.5).Name);
// ── 组织与作用域 ────────────────────────────────────────────
module Shop; // 文件头模块声明
import Math.*; // 导入
using val res = MakeResource(); // 块退出自动 Dispose最后更新于 2026年10月11日
