学习 Move 编程语言的互动式练习。
通过一系列循序渐进的练习,掌握 Move 语言的核心概念和 Sui 区块链开发技能。
Movelings 是一个交互式的 Move 语言学习工具,包含:
- 🎯 渐进式练习:从基础语法到高级概念
- 🔄 自动检测:实时反馈和错误提示
- 💡 智能提示:从代码注释中自动提取学习指导
- 📊 进度跟踪:记录学习进度,支持断点续学
- 🎨 友好界面:清晰的命令行界面和丰富的 emoji 提示
-
安装 Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source ~/.cargo/env
-
安装 Sui CLI:
cargo install --locked --git https://github.com/MystenLabs/sui.git --branch testnet sui
-
验证安装:
rustc --version sui --version
-
克隆仓库:
git clone https://github.com/hoh-zone/movelings.git cd movelings
-
启动学习:
cargo run
命令 | 功能 | 示例 |
---|---|---|
cargo run |
显示主菜单和概览 | - |
cargo run <练习名> |
检查特定练习 | cargo run 00_intro |
cargo run watch |
监视文件变化并自动检查 | - |
cargo run list |
列出所有练习和进度 | - |
cargo run hint <练习名> |
获取练习提示 | cargo run hint 00_intro |
cargo run progress |
查看详细进度报告 | - |
cargo run reset |
重置所有进度 | - |
-
查看菜单:
cargo run
-
开始第一个练习:
cargo run 00_intro
-
根据提示修改代码:
- 打开
exercises/00_intro/sources/intro.move
- 按照注释中的 TODO 和 HINT 完成练习
- 保存文件
- 打开
-
重新测试:
cargo run 00_intro
-
获取帮助(如果卡住):
cargo run hint 00_intro
-
查看进度:
cargo run list
-
使用监视模式(推荐):
cargo run watch
此命令会自动检查第一个未完成的练习,并在你修改并保存任何练习文件时自动重新运行测试。
exercises/
├── 00_intro/ # 🌱 Move 基础入门
│ ├── Move.toml # 包配置文件
│ └── sources/
│ └── intro.move # 练习代码
├── 01_variables/ # 📦 变量和类型
├── 02_functions/ # 🔧 函数定义
├── 03_if/ # 🤔 条件语句
├── 04_primitive_types/ # 🔢 基础数据类型
├── 05_vecs/ # 📋 向量和集合
├── 06_semantics/ # 🔄 所有权和语义
├── 07_structs/ # 🏗️ 结构体定义
└── ... # 更多练习
- 00_intro - Move 语言介绍和第一个程序
- 01_variables - 变量声明、可变性和作用域
- 02_functions - 函数定义、参数和返回值
- 03_if - 条件语句和布尔逻辑
- 04_primitive_types - 基础数据类型和类型转换
- 05_vecs - 向量操作和集合处理
- 06_semantics - 所有权、借用和移动语义
- 07_structs - 结构体定义和实例化
- 08_abilitys - Move 能力系统(Copy, Drop, Key, Store)
- 09_objects - Sui 对象模型和对象操作
- 10_enums - 枚举类型和模式匹配
- 11_strings - 字符串处理和操作
- 12_modules - 模块系统、导入和可见性
- 13_tables - 动态集合和表结构
- 14_bags - 异构集合和包结构
- 15_generics - 泛型编程和类型参数
- 15_options - 可选类型和错误处理
- 17_ownership - 深入所有权和生命周期
- 18_tests - 单元测试和集成测试
- 19_witness - 见证模式和权限验证
- 20_error_handling - 错误处理最佳实践
- 21_macros - 宏编程和代码生成
/*
练习描述
// HINT: 这是一个提示
// TODO: 这是需要完成的任务
// 1. 第一步操作
// 2. 第二步操作
*/
module example::example {
// TODO: 实现这个函数
// public fun my_function() { ... }
}
# 查看特定练习的所有提示
cargo run hint 00_intro
# 练习失败时会自动显示提示
cargo run 00_intro
# 简单列表视图
cargo run list
# 详细进度报告
cargo run progress
进度保存在项目根目录的 .movelings_progress
文件中:
00_intro
01_variables
02_functions
cargo run reset
-
创建练习目录:
mkdir exercises/XX_new_topic cd exercises/XX_new_topic
-
创建 Move.toml:
[package] name = "new_topic" edition = "2024.beta" [addresses] new_topic = "0x0"
-
创建练习文件:
mkdir sources # 创建 sources/exercise.move
-
添加提示和 TODO:
/* // HINT: 学习新概念的提示 // TODO: 完成特定任务 // 1. 步骤一 // 2. 步骤二 */
可以修改 src/utils.rs
中的默认提示:
fn show_default_hints() {
let hints = vec![
"自定义默认提示1",
"自定义默认提示2",
// ...
];
}
欢迎贡献!您可以:
- 🐛 报告 bug
- 💡 建议新功能
- 📝 改进文档
- 🎯 添加新练习
- 🔧 优化代码
开始您的 Move 学习之旅吧! 🚀
如有问题,请查看 Issues 或创建新的 issue。