Skip to Content

语法快速一览

这篇文章中每一条语法都能在对应章节找到完整说明,本页只作速查,可以去对应章节查看完整内容。

// ── 绑定与基础值 ──────────────────────────────────────────── 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日