模块系统
本章节将详细介绍VLineLang的模块系统,特别是import
语句的工作机制和模块搜索优先级。
基本语法
在VLineLang中,你可以使用import
语句来导入其他模块:
vline
// 导入单个模块
import "mymodule"
// 导入子目录中的模块
import "subdir/mymodule"
模块搜索优先级
VLineLang在导入模块时会按照以下优先级顺序搜索文件:
当前目录下的.vl文件(最高优先级)
- 首先搜索与模块名完全匹配的.vl文件
- 例如:
import "mymodule"
会首先查找./mymodule.vl
同名目录下的__init__.vl文件
- 如果没有找到直接匹配的.vl文件,则查找同名目录下的__init__.vl
- 例如:
import "mymodule"
会查找./mymodule/__init__.vl
lib目录下的.vl文件
- 如果在当前目录下未找到,则搜索lib目录下的.vl文件
- 例如:
import "mymodule"
会查找./lib/mymodule.vl
lib目录下目录的__init__.vl文件(最低优先级)
- 最后搜索lib目录下同名目录中的__init__.vl文件
- 例如:
import "mymodule"
会查找./lib/mymodule/__init__.vl
示例结构
以下是一个典型的项目结构示例:
project/
├── main.vl
├── utils.vl
├── config/
│ ├── __init__.vl
│ └── settings.vl
└── lib/
├── database.vl
└── network/
└── __init__.vl
在这个结构中:
vline
// main.vl
// 直接导入当前目录的utils.vl
import "utils"
// 导入config目录下的__init__.vl
import "config"
// 导入lib目录下的database.vl
import "database"
// 导入lib/network目录下的__init__.vl
import "network"
最佳实践
模块命名
- 使用清晰、描述性的模块名
- 避免使用与标准库同名的模块名
- 推荐使用小写字母和下划线
目录结构
- 将相关的模块组织在同一目录下
- 使用__init__.vl来初始化模块包
- 保持目录结构清晰和合理
导入规范
- 将所有导入语句放在文件开头
- 按照功能对导入进行分组
- 避免循环导入
注意事项
路径分隔符
- 在import语句中始终使用正斜杠(
/
)作为路径分隔符 - 这确保了代码在不同操作系统上的一致性
- 在import语句中始终使用正斜杠(
模块可见性
- init.vl文件可以控制模块包的公共接口
错误处理
- 如果模块未找到,VLineLang将抛出错误
- 确保所有依赖模块都存在并且路径正确
调试技巧
如果遇到模块导入问题,可以:
- 检查文件扩展名是否为.vl
- 验证模块名和路径是否正确
- 确认模块文件在正确的搜索路径中
- 检查是否有循环导入
通过遵循这些规则和最佳实践,你可以更好地组织和管理VLineLang项目的代码结构。