map.put("add", add);
map.put("hello", hello);
fn add(a: i32, b: i32) i32 { return a + b; }
fn hello() []const u8 { return "Hello World"; }
is impossible because the value type of key/value of the map needs to be the same but all the function types are different. Calling functions with different number of parameters, different parameter types, and different return type dynamically is difficult.Other languages either use dynamic typing, runtime reflection, macro, or passing in one big generic parameter and let the function figure it out.
In ZigJR, I use Zig's comptime feature to do compile time reflection to figure out a function's parameter types, return types, and return errors. I package them up into a specific call object and use the interface pattern to produce a uniformly typed object to be put into the map. It's not easy but doable. [1]
[1] https://github.com/williamw520/zigjr/blob/master/src/rpc/jso...