语法参考
关键字中英对照
所有关键字中英文等价,可在同一文件混用:
| 英文 | 中文 | 用途 |
|---|---|---|
fn / function | 函数 / 方法 | 定义函数 |
let / var | 定义 / 令 | 声明变量 |
struct | 结构体 | 定义结构体 |
if | 如果 | 条件 |
else | 否则 | 条件分支 |
for | 对于 / 遍历 | 循环 |
while | 当 | 条件循环 |
return | 返回 | 返回值 |
yield | 产出 | 生成器产出值 |
import | 导入 | 导入模块 |
true / false | 真 / 假 | 布尔值 |
nil / null | 空 | 空值 |
match | 匹配 | 模式匹配 |
spawn | 启动 | 创建线程 |
try / catch | 尝试 / 捕获 | 错误处理 |
in | 在 | 迭代/包含 |
and / or / not | 且 / 或 / 非 | 逻辑运算 |
begin / end | 开始 / 结束 | 块标记 |
async | 异步 | 异步函数 |
await | 等待 | 等待异步结果 |
break | — | 跳出循环 |
continue | — | 跳过本次循环 |
标点兼容
词法分析阶段自动替换,中英标点完全等价:
| 中文 | ASCII |
|---|---|
, | , |
: | : |
( ) | ( ) |
【 】 | [ ] |
" " 「 」 | " |
。 | ; |
函数 加法(甲,乙): # 完全合法
返回 甲 + 乙
变量声明
四种写法等价:
let x = 10
var x = 10
定义 x = 10
令 x = 10
可选类型标注(运行时不强制,仅作说明):
let name: str = "pico"
令 count: int = 0
数据类型
| 类型 | 示例 |
|---|---|
| 整数 | 42、-7、0 |
| 浮点 | 3.14、-0.5 |
| 字符串 | "hello"、"你好" |
| 布尔 | true / 真、false / 假 |
| 空值 | nil / null / 空 |
| 列表 | [1, 2, 3] |
| 字典 | {key: "value", n: 42} |
字符串插值(f-string)
令 名字 = "世界"
令 n = 42
打印(f"你好,{名字}!数字是 {n}")
大括号内可以是任意表达式:
打印(f"结果:{1 + 2 * 3}")
打印(f"长度:{len(列表)}")
代码块(三种风格等价)
# 风格1:缩进块(推荐)
fn 加法(a, b):
return a + b
# 风格2:大括号
fn 加法(a, b) {
return a + b
}
# 风格3:begin/end
fn 加法(a, b) 开始
return a + b
结束
运算符
| 运算符 | 说明 |
|---|---|
+ - * / % | 算术 |
== != < <= > >= | 比较 |
and / 且 | 逻辑与(短路) |
or / 或 | 逻辑或(短路) |
not / 非 | 逻辑非 |
+ | 字符串拼接 |
.. | 范围(生成列表) |
= | 赋值 |
+= -= | 复合赋值 |
令 r = 1..5 # [1, 2, 3, 4]
令 s = "hello" + " " + "world"
令 ok = x > 0 and x < 100
条件
if x > 0:
打印("正数")
else if x < 0:
打印("负数")
else:
打印("零")
循环
# 范围循环
for i in 1..10:
打印(i)
# 列表迭代
for 项 in ["a", "b", "c"]:
打印(项)
# range() 函数
for i in range(5): # 0 1 2 3 4
打印(i)
for i in range(2, 7): # 2 3 4 5 6
打印(i)
# 条件循环
令 n = 0
当 n < 5:
n += 1
# break / continue
for i in range(10):
if i == 3: continue
if i == 7: break
打印(i)
函数
# 基本定义
fn 问候(名字):
return f"你好,{名字}"
# 多参数
fn 加法(a, b):
return a + b
# 无返回值(返回 nil)
fn 打印两次(x):
打印(x)
打印(x)
# 匿名函数
令 平方 = fn(x): return x * x
令 结果 = 平方(5) # 25
# 闭包
fn 计数器():
令 n = 0
return fn():
n += 1
return n
令 c = 计数器()
打印(c()) # 1
打印(c()) # 2
结构体
结构体 用户:
名字: str
年龄: int
fn 问候(self):
return f"我是{self.名字},{self.年龄}岁"
fn 生日(self):
self.年龄 += 1
令 u = 用户{名字: "小明", 年龄: 18}
打印(u.问候())
u.生日()
打印(u.年龄) # 19
self 和 自身 等价。
继承
结构体 动物:
名字: str
fn 说话(self): return f"{self.名字}..."
结构体 狗(动物):
fn 说话(self):
令 base = super.说话(self)
return f"{self.名字}:汪汪!"
结构体 猫(动物):
fn 说话(self): return f"{self.名字}:喵~"
令 d = 狗{名字: "旺财"}
令 c = 猫{名字: "咪咪"}
打印(d.说话()) # 旺财:汪汪!
打印(c.说话()) # 咪咪:喵~
struct 子类(父类):/结构体 子类(父类):声明继承- 方法查找沿继承链向上
super/父类调用父类方法
列表操作
令 l = [3, 1, 4, 1, 5]
l[0] # 3(索引)
l[1..3] # [1, 4](切片)
len(l) # 5
字典操作
令 m = {name: "pico", version: 1}
m["name"] # "pico"
m["version"] # 1
m["new"] = 42 # 新增键
模式匹配
匹配 x:
0 => 打印("零")
1 | 2 => 打印("一或二")
_ => 打印("其他")
_ 为默认分支,| 匹配多个值。
生成器
fn 斐波那契():
令 a, b = 0, 1
当 真:
产出 a
a, b = b, a + b
for n in 斐波那契():
if n > 100: break
打印(n)
错误处理
尝试:
令 结果 = 危险操作()
打印(结果)
捕获 err:
打印(f"出错:{err}")
多线程
# 创建线程
令 任务 = 启动 fn():
return 耗时计算()
令 结果 = 任务.等待() # 阻塞等待
# 互斥锁
令 锁 = Mutex() # 或 互斥锁()
锁.lock()
# 临界区
锁.unlock()
# 通道(有缓冲)
令 ch = Channel(10) # 或 通道(10)
ch.send(42)
令 v = ch.recv()
异步函数
async fn 获取(地址):
令 响应 = await 网络.获取(地址)
return 响应
令 结果 = 获取("https://example.com")
导入模块
import math
导入 math
# 使用
math.sqrt(16)
注释
# 这是单行注释
令 x = 1 # 行尾注释