Skip to content
zig 版本:0.12.0

杂项

本部分是关于 zig 一些额外知识的补充,暂时还没有决定好分类到何处!

容器

在 Zig 中,容器 是充当保存变量和函数声明的命名空间的任何语法结构。容器也是可以实例化的类型定义。结构体、枚举、联合、不透明,甚至 Zig 源文件本身都是容器,但容器并不能包含语句(语句是描述程序运行操作的一个单位)。

当然,你也可以这样理解,容器是一个只包含变量或常量定义以及函数定义的命名空间。

注意:容器和块(block)不同!

usingnamespace

关键字 usingnamespace 可以将一个容器中的所有 pub 声明混入到当前的容器中。

例如,可以使用将 usingnamespace 将 std 标准库混入到 main.zig 这个容器中:

zig
const T = struct {
    usingnamespace @import("std");
};
pub fn main() !void {
    T.debug.print("Hello, World!\n", .{});
}

注意:无法在结构体 T 内部直接使用混入的声明,需要使用 T.debug 这种方式才可以!

usingnamespace 还可以使用 pub 关键字进行修饰,用于转发声明,这常用于组织 API 文件和 C import。

zig
pub usingnamespace @cImport({
    @cInclude("epoxy/gl.h");
    @cInclude("GLFW/glfw3.h");
    @cDefine("STBI_ONLY_PNG", "");
    @cDefine("STBI_NO_STDIO", "");
    @cInclude("stb_image.h");
});