Zig 入門 #7 - import
2022-04-23 / Zig, Programming
ziglearn.org を参考に Zig
の基本を一通りさらってみます。まずは Chapter 1 - Basics | ziglearn.org から。今回は今までと順番が変わって @import
について。そろそろファイルを分けたくなったので。
Imports
参考: Imports
どんな言語でも言語自体に用意されている標準ライブラリを利用したり、コードを複数のファイルに分けて管理して連携させるということが発生します。Zig にもそのためのインポートの機能が用意されています。
const name = @import("path");
path
は標準ライブラリの場合には用意されているパッケージ名を指定します- 自分で管理しているファイルを使用する場合は相対パスを記述します。拡張子
.zig
は必須です @import
は任意のタイミングで呼び出し可能です- ファイルの冒頭でも良いし、関数の中でも良い
name
は任意なのでパッケージ名と同じで無くても良いpub
を利用して関数や変数に修飾すると別ファイルでインポートされた際に利用可能になりますpub
がついてないものはプライベートになります
pub
のスコープはファイル単位です
今回確認したコードは以下の通りです。
src/main.zig
fn import_() void {
// @import の引数にファイルの相対パスを指定する
// `.zig` の拡張子を省略することはできない
// @import は任意の箇所で呼び出し可能
const bar = @import("foo/bar.zig");
// pub がついたものは他ファイルから参照することが可能
bar.hello();
_ = bar.public;
// ついていないものは参照できないのでコンパイルエラーになる
_ = bar.private;
// ./src/main.zig:209:12: error: 'private' is private
// _ = bar.private;
// ^
// ./src/foo/bar.zig:4:1: note: declared here
// const private = "private";
// ^
}
src/foo/bar.zig
const std = @import("std");
pub const public = "public";
const private = "private";
pub fn hello() void {
std.log.info("hello", .{});
}