Zig で []const u8
から enum に変換する
たぶん builtin にも存在しない気がする?のですが、逆 (enum → string) は @tagName
で可能なので、 @typeInfo
や inline 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
便利。