Skip to content

Zig Snippets: string to enum

Posted on:2022年8月31日

Zig で []const u8 から enum に変換する

たぶん builtin にも存在しない気がする?のですが、逆 (enum → string) は @tagName で可能なので、 @typeInfoinline for をくみあわせて以下のように書くことができます。

const std = @import("std");

const E = enum { a, b };

fn strToE(s: []const u8) ?E {
    inline for (@typeInfo(E).Enum.fields) |f| {
        if (std.mem.eql(u8, f.name, s)) {
            return @intToEnum(@This(), f.value);
        }
    }
    return null;
}

inline for 便利。