06 Modules¶
这部分介绍 YIAN 中的模块系统. 模块系统用于多文件情况下组织代码.
Module¶
YIAN 中, 每个源代码文件(.an)是一个模块, 在模块顶层被标记为 pub 的项(函数, 结构体, 枚举, trait 等)可以被其他模块通过 import 语句访问.
Import¶
YIAN 的 import 被设计为一种单纯的名称暴露机制, 具体语法详见引言章节, 其作用是将一个模块中的项暴露到另一个模块中, 以便在另一个模块中使用. 除了扩大一个名称的可见范围之外, import 不会引入任何其他的副作用, 以及运行时开销. 因此, 循环 import 是被允许的(例如, 两个模块相互导入对方的项). 下面是一个实例:
目录结构:
src/
├── person.an
└── car.an
文件内容:
// person.an
from car import Car
pub struct Person {
Car* car
}
// car.an
from person import Person
pub struct Car {
Person* owner
}
访问权限¶
YIAN 的访问权限较为简单: 通过 pub 关键字标记的项可以被其他模块访问, 没有 pub 标记的项只能在当前模块内访问
除了模块顶层的项适用于这个规则以外, 方法和结构体的字段也适用于这个规则, 例如:
pub struct Person {
pub String name
int age
}
impl Person {
pub static Self new(String name, int age) {
return Self(name, age)
}
}
foo(Person* p) {
p.age += 1
}
在上面的例子中, age 字段并不是 pub 的, 但是由于方法 new 和函数 foo 与 age 字段在同一个模块内, 因此它们可以访问 age 字段.