如何包含另一个 .zig 文件中的一个 .zig 文件

Dav*_*son 12 zig

只是探索 Zig...我有一个 .zig 文件,其中包含一堆 comptime 函数和常量,我想在其他 .zig 程序中使用它们。相当于#include "my.h"C中的。

Dav*_*son 11

答案是@import("foo.zig") 几乎可以做到这一点。如果你有 foo.zig:

const a = 1;
pub const b = 2;
pub const c = 3;
Run Code Online (Sandbox Code Playgroud)

然后在 main.zig 中:

const stdout = @import("std").io.getStdOut().writer();
const foo = @import("foo.zig");
const c = foo.c;
const a = foo.a;
test "@import" {
//  try stdout.print("a={}\n",.{foo.a});
//  try stdout.print("a={}\n",.{a});
    try stdout.print("b={}\n",.{foo.b});
    try stdout.print("c={}\n",.{c});
}
Run Code Online (Sandbox Code Playgroud)

将打印 b 和 c 的值,但如果取消注释行,您将收到错误,因为 a 未导出 ( pub)。有趣的是,除非使用const a=foo.a,否则不会给出错误。a

似乎无法将所有导入转储到当前名称空间中,因此如果您希望名称不合格,则必须const为每个名称添加一行。

感谢 Zig 不和谐的人们,特别是 @rimuspp 和 @kristoff


Dav*_*son 5

你实际上可以使用:

const bar = struct {
    usingnamespace @import("foo.zig");
};
Run Code Online (Sandbox Code Playgroud)

将完整的命名空间导入到结构中,但不是在顶层。