HHY 参考

语法完整参考

V1.0 的词法、字面量、运算符、语句、闭包和模块语法。

源文件与词法

项目规则
文件.hhy、UTF-8、LF 或 CRLF
标识符大小写敏感;ASCII 字母、数字和下划线,不能以数字开头
语句结束换行或可选分号
续行未闭合括号或行首/行尾的 |>
注释# 单行注释;首行允许 shebang
/表达式起点为 Regex,已有左操作数后为除法

字面量与原生单位

example.hhy
let nothing = null
let flags = [true, false]
let numbers = [42, -10, 0xff, 0b1010, 1.5, 1e6]
let name = "HHY"
let strings = ["hello", "Hello, {name}"]
let pattern = /ERROR|WARN/i
let list = [1, 2, 3]
let record = { name: "Tom", age: 20 }
let interval = 1..10
let units = [10mib, 5s, 80%]

Range 包含起点、不包含终点。Bytes 支持 b/kb/mb/gb/kib/mib/gib;Duration 支持 ns/us/ms/s/min/h;紧贴数字的 % 是 Percent。String 支持插值以及 \, ", \n, \r, \t, \b, \f, \0 转义。

运算符优先级(高到低)

text
()  []  .
not  -  +
*  /  %
+  -
<  <=  >  >=
==  !=
and
or
??
|>
=

and、or 与 ?? 短路执行;= 只允许给 let mut 绑定赋值;|> 左结合。条件必须是 Bool,不存在把 0、空字符串或 null 自动当作 false 的规则。

声明、控制流、函数与模块

example.hhy
let name = "HHY"
let mut count = 0
count = count + 1
let enabled = true
let items = ["Flow", "Pipe"]

if enabled { print("yes") } else { print("no") }
for item in items { print(item) }
while count < 3 { count = count + 1 }

fn add(a, b) { return a + b }
let doubled = [1, 2] |> stream |> map { number -> number * 2 } |> collect

try { read_text(path("config.json")) } catch err { print_error(err) }
let result = attempt { read_text(path("config.json")) }

import { add as sum_two } from "./math.hhy"
export fn public_api(value) { return value }
结构形式
调用name(args)
Pipex |> f(a) 等价于 f(x, a)
闭包{ param -> expression }
Map{ key: value }
控制流if、for、while、break、continue、return
模块import、as、export

核心值类型

text
Null Bool Int Float String Regex BytesBuffer
List Map Range Function Error Result Stream
Bytes Duration Percent DateTime Path
File Directory FileEvent Process CommandResult
HttpRequest HttpResponse