Zenで作成したアプリケーションでコマンドライン引数を受け取る方法を説明します。
Zenではコマンドラインで与えられた引数は、std.process
モジュールにある関数を使用して取得できます。
まず、コマンドライン引数を受け取って、そのまま表示するプログラムを書いてみましょう。print_args
という新しいアプリケーションプロジェクトを作成します。
$ mkdir print_args && cd $_
$ zen init-exe
main.zen
を次の内容に修正します。
examples/ch13-io/print_args/src/main.zen:1:14
const std = @import("std");
const heap = std.heap;
pub fn main() anyerror!void {
var arena = heap.ArenaAllocator{ .allocator = heap.page_allocator };
defer arena.deinit();
const args = try std.process.argsAlloc(&mut arena);
std.debug.warn("number of args: {}\n", .{args.len});
for (args) |arg| {
std.debug.warn("{}\n", .{arg});
}
}
まず、最初にコマンドライン引数を格納するメモリを確保するアロケータを準備しています。そして、std.process.argsAlloc(&mut arena)
を呼び出します。argsAlloc
関数は![]mut []mut u8
(u8
2次元スライスのエラー共用体) の値を返します。メモリアロケーションに失敗した場合は、エラーが返ってきます。ここでは、メモリアロケーションエラーが発生するとプログラムが停止することとし、try
をつけて呼び出します。
残りのコードは受け取った引数を表示するためのものです。スライスの要素数はlen
でアクセスできるため、受け取ったコマンドライン引数の数は、2次元スライスの要素数から取得できます。
では、ビルドして実行してみましょう。
$ zen build
# まずは引数なしで実行する
$ zen-cache/bin/print_args
number of args: 1
zen-cache/bin/print_args
# 引数ありで実行する
$ zen-cache/bin/print_args these are args
number of args: 4
zen-cache/bin/print_args
these
are
args
取得した引数の最初の値は、zen-cache/bin/print_args
です。これはアプリケーションバイナリの名前です。プログラム内から、自身の名前にアクセスしたい時に利用します。この値は、ヘルプメッセージでプログラムの利用方法を出力したい場合などに便利です。
各コマンドライン引数を変数として扱えるようにするには、次のようにします。
examples/ch13-io/print_args/src/main.zen:15:19
const name = args[0];
const first = args[1];
const second = args[2];
std.debug.warn("app name: {}, first arg: {}, second arg: {}\n", .{ name, first, second });
}
実行すると、次の結果になります。
$ zen-cache/bin/print_args these are args
// ..
app name: zen-cache/bin/print_args, first arg: these, second arg: are
☰ 人の生きた証は永遠に残るよう ☰
Copyright © 2018-2020 connectFree Corporation. All rights reserved. | 特定商取引法に基づく表示
Zen, the Zen three-circles logo and The Zen Programming Language are trademarks of connectFree corporation in Japan and other countries.