HHY 参考
标准库函数索引
运行时 Registry 中全部 94 个 V1.0 callable 的签名与用途。
如何阅读签名
本页以 V1.0 Runtime 的 Callable Contract Registry 为权威来源,共 94 项。T/U 表示泛型占位值,? 表示可选参数或可空结果,Map? 表示可选 options Map。所有函数都可普通调用;在管道中,左侧值会注入为第一个参数。
核心值、集合、环境与控制(22)
函数print#
print(Value...) -> Null把值写到标准输出;传入 Stream 时逐项输出并消费它。
函数print_error#
print_error(Value...) -> Null把值写到标准错误;适合诊断信息。
函数exit#
exit(Int?) -> Never立即以给定状态码结束脚本,省略时使用 0,并触发资源清理。
函数length#
length(String | List | Map) -> Int返回 String 的 code point 数或 List/Map 的元素数;Stream 应使用 count。
函数byte_length#
byte_length(String | BytesBuffer) -> Int返回 String 的 UTF-8 字节数或 BytesBuffer 大小。
函数type#
type(Value) -> String返回值的逻辑类型名。
函数is_type#
is_type(Value, String) -> Bool判断值是否具有指定逻辑类型,返回 Bool。
函数to_int#
to_int(Int | Float | String) -> Int把 Int/Float/String 显式转换为 Int,失败或溢出产生 ValueError。
函数to_float#
to_float(Int | Float | String) -> Float把 Int/Float/String 显式转换为 Float,失败产生 ValueError。
函数get#
get(List | Map | Record, Int | String) -> Value | Null安全读取 List 索引、Map 键或对象字段;缺失返回 null。
函数require#
require(Map, String) -> Value读取必需 Map 键;键缺失产生 KeyError,存在且为 null 时返回 null。
函数pick#
pick(Map, List<String>) -> Map返回只保留指定键的新 Map,并保留存在的 null 字段。
函数put#
put(Map, String, Value) -> Map返回新增或替换一个键的新 Map,不修改原 Map。
函数remove_key#
remove_key(Map, String) -> Map返回移除指定键的新 Map。
函数append#
append(List<T>, T) -> List<T>返回末尾增加一个元素的新 List。
函数remove_at#
remove_at(List<T>, Int) -> List<T>返回移除指定索引的新 List;越界产生 IndexError。
函数now#
now() -> DateTime返回带时区的当前 DateTime。
函数datetime.parse#
datetime.parse(String, String, String) -> DateTime按明确的格式和时区解析 DateTime,非法输入产生 ValueError。
函数require_env#
require_env(String) -> String读取必需环境变量;不存在时产生 KeyError。
函数sleep#
sleep(Duration) -> Null可取消地等待指定 Duration。
函数cancel#
cancel() -> Never触发当前执行的根取消令牌并开始统一清理。
函数throw#
throw(Error) -> Never抛出 Error,并沿调用栈或 Flow 传播。
Flow 与 Stream(25)
map/where/take 等转换保持惰性;collect、count、reduce 等终端操作消费 Stream;sort_by 与 group_by 会在资源上限内物化输入。parallel 使用有界隔离 worker 并保持输出顺序。
函数stream#
stream(List<T> | Map | Range) -> Stream<T>把 List、Map entries 或 Range 转成惰性单次消费 Stream。
函数range#
range(Int, Int) -> Stream<Int>创建从 start 到 end(不含 end)的 Int Stream。
函数map#
map(Stream<T>, Function(T -> U)) -> Stream<U>惰性地对每项调用闭包,一项输入对应一项输出,不自动展开。
函数flat_map#
flat_map(Stream<T>, Function(T -> Stream<U>)) -> Stream<U>对每项返回一个子 Stream,并惰性地把子流依次展开。
函数where#
where(Stream<T>, Function(T -> Bool)) -> Stream<T>惰性保留闭包返回 true 的项目;闭包必须返回 Bool。
函数take#
take(Stream<T>, Int) -> Stream<T>惰性保留前 n 项,达到数量后提前关闭上游。
函数skip#
skip(Stream<T>, Int) -> Stream<T>惰性丢弃前 n 项,然后传递其余项目。
函数inspect#
inspect(Stream<T>, Function(T -> Value)) -> Stream<T>为每项执行观察闭包,再原样传递项目。
函数distinct#
distinct(Stream<Hashable>) -> Stream<Hashable>惰性去除重复的可 Hash 标量,并保存已见集合。
函数sort_by#
sort_by(Stream<T>, Map, Function(T -> Comparable)) -> Stream<T>物化有限输入,按闭包 key 和 asc/desc 选项稳定排序。
函数group_by#
group_by(Stream<T>, Function(T -> Hashable)) -> Stream<Group<T>>物化有限输入并按 Hash key 输出 Group;Group 含 key 与 values。
函数debounce#
debounce(Stream<T>, Duration) -> Stream<T>在指定 Duration 内合并快速连续事件,常用于 watch。
函数on_error#
on_error(Stream<T>, Function(Error -> Stream<T>)) -> Stream<T>当 Stream 失败时调用闭包,用返回的 Stream 恢复或替换后续输出。
函数parallel#
parallel(Stream<T>, Int, Function(T -> U)) -> Stream<U>用最多 n 个隔离 worker 并发处理,保序、有界缓冲且 fail-fast。
函数collect#
collect(Stream<T>) -> List<T>消费有限 Stream 并物化为 List。
函数count#
count(Stream<T>) -> Int消费 Stream 并返回项目数。
函数first#
first(Stream<T>) -> T | Null返回第一项或 null,并提前关闭上游。
函数last#
last(Stream<T>) -> T | Null消费 Stream 并返回最后一项或 null。
函数min#
min(Stream<Number>) -> Number | Null消费数值 Stream,返回最小值或空流的 null。
函数max#
max(Stream<Number>) -> Number | Null消费数值 Stream,返回最大值或空流的 null。
函数sum#
sum(Stream<Number>) -> Number消费数值 Stream 并求和,遵守 Int 溢出规则。
函数reduce#
reduce(Stream<T>, U, Function(State<T,U> -> U)) -> U以 initial 累积 Stream;闭包接收含 acc/item/index 的 state。
函数any#
any(Stream<T>, Function(T -> Bool)) -> Bool任一项目满足谓词即返回 true,并短路关闭上游。
函数all#
all(Stream<T>, Function(T -> Bool)) -> Bool所有项目满足谓词才返回 true;首个 false 时短路。
函数for_each#
for_each(Stream<T>, Function(T -> Value)) -> Null消费 Stream 并为每项执行闭包,返回 null。
文本、Regex、JSON 与 CSV(17)
函数contains#
contains(String | List, Value) -> Bool判断 String 是否含子串,或 List 是否含相等值。
函数upper#
upper(String) -> String返回 Unicode 大写转换后的新 String。
函数lower#
lower(String) -> String返回 Unicode 小写转换后的新 String。
函数trim#
trim(String) -> String移除 String 两端空白。
函数trim_start#
trim_start(String) -> String移除 String 开头空白。
函数trim_end#
trim_end(String) -> String移除 String 末尾空白。
函数starts_with#
starts_with(String, String) -> Bool判断 String 是否以指定文本开头。
函数ends_with#
ends_with(String, String) -> Bool判断 String 是否以指定文本结尾。
函数replace#
replace(String, String, String) -> String返回把匹配文本替换后的新 String。
函数split#
split(String, String) -> List<String>按分隔文本把 String 分割成 List<String>。
函数join#
join(List<String>, String) -> String用分隔文本连接 List<String>。
函数regex_match#
regex_match(String, Regex) -> Bool判断 PCRE2 Regex 是否匹配 String,受正则资源限制。
函数regex_captures#
regex_captures(String, Regex) -> Map | Null返回完整匹配、字节位置、编号和命名捕获;不匹配返回 null。
函数parse_json#
parse_json(String) -> JsonValue严格解析 JSON String 为普通 HHY 值,错误包含行列。
函数encode_json#
encode_json(JsonValue, Map?) -> String把可编码普通值转成 JSON;options 可启用 pretty。
函数parse_csv#
parse_csv(String | Stream<String>, Map?) -> Stream<Map>把 String 或行 Stream 流式解析成 Stream<Map>。
函数encode_csv#
encode_csv(Stream<Map>, Map?) -> Stream<String>把 Stream<Map> 流式编码为不含换行符的 CSV record Stream。
路径、文件与监听(15)
read_* 是读取操作;write_* 直接写入;save_* 使用临时文件加原子替换。文件系统 action 会被 dry-run 拦截。
函数path#
path(String) -> Path把 String 词法规范化为 Path,不访问文件系统。
函数path_join#
path_join(Path, String | Path) -> Path组合 Path 与子路径并返回规范化的新 Path。
函数files#
files(Path, String, Map?) -> Stream<File | Directory>按 glob 惰性遍历根目录,返回 File/Directory Stream。
函数read_text#
read_text(Path) -> String完整读取 UTF-8 文件为 String。
函数read_lines#
read_lines(Path) -> Stream<String>逐行惰性读取 UTF-8 文件并移除行终止符。
函数read_bytes#
read_bytes(Path) -> BytesBuffer完整读取二进制文件为 BytesBuffer。
函数write_text#
write_text(Path, String, Map?) -> Path以原子替换方式写 String,支持 overwrite/create_parents。
函数append_text#
append_text(Path, String) -> Path把 String 追加到文件末尾。
函数write_bytes#
write_bytes(Path, BytesBuffer, Map?) -> Path以原子替换方式写 BytesBuffer。
函数save_text#
save_text(String | Stream<String>, Path, Map?) -> Path把 String 或文本 Stream 边拉取边原子保存。
函数save_lines#
save_lines(Stream<String>, Path, Map?) -> Path把 String Stream 逐项写入并补 LF,最终原子替换。
函数copy#
copy(Path, Path, Map?) -> Path复制文件,支持原子 no-replace 与创建父目录。
函数move#
move(Path, Path, Map?) -> Path移动或重命名文件,遵守覆盖选项。
函数remove#
remove(Path) -> Path删除明确 Path,并返回该 Path。
函数watch#
watch(Path, Map?) -> Stream<FileEvent>返回无限 FileEvent Stream,支持 recursive 选项并响应取消。
进程、标准输入与定时(6)
run 直接传递 argv,不经过 Shell;只有 shell 明确采用 Shell 解析。进程启动会受 timeout、输出和进程数限制。
函数run#
run(List<String>, Map?) -> CommandResult直接执行 argv,不经过 Shell;返回 CommandResult。
函数shell#
shell(String, Map?) -> CommandResult显式用 Shell 执行 String;仅在需要重定向、管道等 Shell 语义时使用。
函数stdout_lines#
stdout_lines(CommandResult) -> Stream<String>把 CommandResult.stdout 转为惰性行 Stream。
函数processes#
processes() -> Stream<Process>获取当前进程快照的 Stream<Process>。
函数stdin_lines#
stdin_lines() -> Stream<String>惰性读取标准输入行,直到 EOF 或取消。
函数every#
every(Duration) -> Stream<Int>按指定 Duration 产生无限计时 tick Stream。
HTTP(9)
http.* 只构造不可变请求计划,timeout/retry 修改计划,只有 send 产生网络副作用。response_body 返回 UTF-8 文本,二进制响应使用 response_bytes。
函数http.get#
http.get(String, Map?) -> HttpRequest构造 GET HttpRequest 计划,不发送网络请求。
函数http.post#
http.post(String, Map?) -> HttpRequest构造 POST HttpRequest 计划,不发送网络请求。
函数http.put#
http.put(String, Map?) -> HttpRequest构造 PUT HttpRequest 计划,不发送网络请求。
函数http.delete#
http.delete(String, Map?) -> HttpRequest构造 DELETE HttpRequest 计划,不发送网络请求。
函数timeout#
timeout(HttpRequest, Duration) -> HttpRequest返回设置请求超时的新 HttpRequest。
函数retry#
retry(HttpRequest, Map) -> HttpRequest返回配置重试次数和退避的新 HttpRequest。
函数send#
send(HttpRequest) -> HttpResponse执行 HttpRequest 网络副作用并返回 HttpResponse。
函数response_body#
response_body(HttpResponse) -> String验证响应状态并把有界 body 解码为 UTF-8 String。
函数response_bytes#
response_bytes(HttpResponse) -> BytesBuffer验证响应状态并返回有界二进制 BytesBuffer。
