惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
The Cloudflare Blog
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
F
Fortinet All Blogs
J
Java Code Geeks
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队

姓王者的博客

Linux用户Secure Boot自主维护指南 | 姓王者的博客 MAD Bugs 已经开始——关于信息安全的军备竞赛 | 姓王者的博客 解决钉钉Dingtalk无法在Linux新版内核上启动问题-修复可执行栈错误 | 姓王者的博客 突发:GitHub 正遭受大规模 Issue 赌博广告轰炸 | 姓王者的博客 Ubuntu26.04-beta体验:坚毅浣熊! | 姓王者的博客 fakeclaw装作龙虾发贴吧 | 姓王者的博客 找回12年前的QQ记忆 | 姓王者的博客 在Linux上玩Flash网页游戏-洛克王国 | 姓王者的博客 Copilot将使用交互数据来训练 | 姓王者的博客 重要通知-请更新我的GPG公钥 | 姓王者的博客 为了自由Android | 姓王者的博客 GPL"2,3"事 | 姓王者的博客 短文-对VitePlus的一点🤏小贡献 | 姓王者的博客 Bing收录没了?亲测有效的快速恢复指南 | 姓王者的博客 解决桌面设备二维码快速识别的工具-ClipQR | 姓王者的博客 解决 Nautilus 自定义终端插件安装依赖问题 | 姓王者的博客 OpenClaw 该熄火了 | 姓王者的博客 Vite8 - 统一的基建开始 | 姓王者的博客 Astro 6 推出啦 | 姓王者的博客 ubuntu的openvpn异常暂停推送更新 | 姓王者的博客 Ubuntu 24.04 安装 Win10 虚拟机 | 姓王者的博客 ESA-后记:热爱阿里云 | 姓王者的博客 Moonbit 0.8.0 重大发布,我也要改一下我的包 | 姓王者的博客 ESA Pages 边缘开发大赛获奖 | 姓王者的博客 Astro: 优化katex,mermaid和灯箱使用 | 姓王者的博客 从edgeone迁移到esa | 姓王者的博客 出租人类:AI时代的荒诞与真实 | 姓王者的博客 Astro 5.17构建性能优化实践:从18s到13s | 姓王者的博客 Moonbit License Checker 开发使用 | 姓王者的博客 Stalux Astro博客主题自荐 | 姓王者的博客
中秋-来试试Moonbit吧 | 姓王者的博客
作者:xingwangzhe · 2025-10-06 · via 姓王者的博客

🕒 阅读时间:2 分钟 📝 字数:491 👀 阅读量: Loading...

大家中秋🎑快乐啊

什么是Moonbit

Moonbit是国产的一门编程语言,它很年轻,预计26年左右发布1.0版本

特点:

  • 支持函数式和面向对象等多种编程范式,兼具动态灵活与安全高效
  • 实用的类型系统,面向数据的语言设计,让任何背景的开发者迅速上手
  • 支持WebAssembly、JavaScript等多后端,应用场景广阔

简单做个包,并试试

Moonbit的名字来源于月兔,同理,它的包也叫 MoonCake ,也就是月饼,虽然我不怎么爱吃月饼,但是我还是愿意做个Mooncake包的

xingwangzhe/files_tree

这个包依赖官方的moonbitlang/x,因为官方的fs方法尚在beta,还未纳入到moonbitlang/core官方核心包,未来我可能还得再改一下

原理逻辑

该包采用递归遍历算法构建目录结构的文件树表示。核心数据结构为 FileNode 枚举类型,定义为 File(String) 用于表示文件节点,Directory(String, Array[FileNode]) 用于表示目录节点及其子节点数组。

build_tree(path) 函数首先通过 @fs.is_dir() 判断路径类型。若为文件,则直接构造 File 节点;若为目录,则调用 @fs.read_dir() 获取目录内容,并对每个子项递归调用 build_tree,构建完整的树结构。路径处理模块支持跨平台兼容,自动检测并适配路径分隔符(Unix 系统使用 /,Windows 系统使用 \)。

打印功能通过 ASCII 字符生成树形图,使用符号如 ├──└── 表示层次关系。print_tree() 函数直接输出到控制台,tree_to_string() 函数返回字符串表示。底层实现依赖 @fs 模块提供的文件系统接口,包括 is_dir()read_dir() 等操作。

注意事项

路径解析基于程序运行时的当前工作目录(CWD),而非源代码文件位置。这是因为底层文件系统操作通过操作系统内核进行路径解析,遵循 POSIX 标准,相对路径以进程 CWD 为基准。

测试结果

:::tip 由于我的astro尚未支持moonbit的代码块,我暂时用rs高亮来展示 :::

fn tesst()->Unit raise {

let tree_node = @files_tree.build_tree("./target");

@files_tree.print_tree(tree_node);

}

fn main {

println(@lib.fib(10));

try {

tesst();

} catch { e =>

println("Error: \{e}");

}

}

target/

├── .moon-lock

├── packages.json

├── wasm-gc/

└── release/

├── check/

├── cmd/

└── main/

└── main.mi

├── check.output

├── testmm.blackbox_test.mi

├── .moon-lock

├── check.moon_db

├── moon.db

├── testmm.mi

└── .mooncakes/

├── moonbitlang/

└── x/

├── sys/

├── internal/

└── ffi/

└── ffi.mi

└── sys.mi

├── num/

└── num.mi

├── encoding/

├── encoding.mi

└── internal/

└── benchmark/

├── decoding_streaming/

└── decoding_streaming.mi

├── benchmark.mi

└── decoding_batch/

└── decoding_batch.mi

├── fs/

└── fs.mi

├── stack/

└── stack.mi

├── crypto/

└── crypto.mi

├── time/

└── time.mi

├── internal/

└── ffi/

└── ffi.mi

├── benchmark/

├── internal/

└── benchmark_ffi/

└── benchmark_ffi.mi

└── benchmark.mi

├── uuid/

└── uuid.mi

├── json5/

└── json5.mi

└── rational/

└── rational.mi

└── xingwangzhe/

└── files_tree/

└── files_tree.mi

└── build/

├── cmd/

└── main/

├── main.core

├── main.mi

└── main.wasm

├── testmm.core

├── .moon-lock

├── moon.db

├── build.output

├── testmm.mi

├── build.moon_db

└── .mooncakes/

├── moonbitlang/

└── x/

├── fs/

├── fs.mi

└── fs.core

└── internal/

└── ffi/

├── ffi.core

└── ffi.mi

└── xingwangzhe/

└── files_tree/

├── files_tree.core

└── files_tree.mi

└── doc/

├── index.html

└── xingwangzhe/

└── testmm/

├── cmd/

└── main/

├── members.md

├── resource.json

├── main.mbt.html

└── package_data.json

├── members.md

├── resource.json

├── module_index.json

├── testmm.mbt.html

├── _sidebar.md

├── README.md

└── package_data.json

嘻嘻😁,还挺好玩的