Jean-Pierre asks (https://zig.news/jpl/comment/d5) how to associate arrays with enums, so that each value of an enum is paired with an array element.
A common usecase is to have a string description paired with each enum value. Here's an example:
const std = @import("std");
pub const ErrorNames = enum {
too_low,
too_high,
unknown,
pub const ErrorNameTable = [@typeInfo(ErrorNames).Enum.fields.len][:0]const u8{
"Too Low",
"Too High",
"Unknown Error",
};
pub fn str(self: ErrorNames) [:0]const u8 {
return ErrorNameTable[@enumToInt(self)];
}
};
pub fn main() !void {
inline for (@typeInfo(ErrorNames).Enum.fields) |f| {
std.debug.print("{d} {s} \"{s}\"\n", .{ f.value, f.name, ErrorNames.ErrorNameTable[f.value] });
}
var err = ErrorNames.too_low;
std.debug.print("got enum \"{s}\"\n", .{err.str()});
}
Outputs:
$ zig run enum_table.zig
0 too_low "Too Low"
1 too_high "Too High"
2 unknown "Unknown Error"
got enum "Too Low"
This also demonstrates 2 nice features of using zig's comptime:
- easy to dump all the enum values and paired strings
- comptime check that the string array is the same length as the enum list
Hope this helps!
Latest comments (6)
Why not just switch on the error and avoid the enum?
Although I personally think it's better to just switch locally at the callsite of the function that may fail, like so:
I am progressing slowly in my study of the "Zig-lang" language, today I see why to implement the last solution.
Ps: nothing better than transcribing a software from one language to another, because we don't care about the conceptual, but about the language.
Yes I would normally do that too. The question asked about having an enum that was being displayed in a gui, and switching on the selected value. Lots of great ways to do it!
Yet another request ;).
you have a complex function that returns a result...
there no problem, my problem I would like to be able to put in a "[] const u8" the name of this function... everything is in a console type interactive, there still no problem, how to do without putting in hard the name of the call to this function with a return... i'm doing this in nim-lang
the desired result: the person clicks on the area , and a table is displayed with a choice (a combo).
Maybe I'm confused, the idea is to retrieve the value and what call automatically through a function this function.
Schematically.
var callQuery= Table[string, proc(fld : var FIELD)]
proc TblCountry(fld: var FIELD) =
...
return fld
callQuery["TblCountry"] = TblCountry
program :
switch ....
val => callQuery[value) here I am getting the requested value and returning the combo choice....
I hope the google translation is clear...
To learn Zig-lang I convert my designer written under Nim-lang I advance well your subjects contributes to it.
zig.news/david_vanderson/function-...
Does this answer your question? Let me know if I misunderstood.
Thank you, of course it helps me, and it is very practical.