defmodule Foo do
def setup(funcs) do
Code.compile_quoted(quote bind_quoted: [funcs: funcs] do
defmodule RuntimeLookup do
for {name, value} <- funcs, do: def unquote(name)(), do: unquote(value)
end
end)
end
def main do
setup(foo: 42)
IO.inspect RuntimeLookup.foo()
end
end
Foo.main
ZGVmbW9kdWxlIEZvbyBkbwogIGRlZiBzZXR1cChmdW5jcykgZG8KICAgIENvZGUuY29tcGlsZV9xdW90ZWQocXVvdGUgYmluZF9xdW90ZWQ6IFtmdW5jczogZnVuY3NdIGRvCiAgICAgIGRlZm1vZHVsZSBSdW50aW1lTG9va3VwIGRvCiAgICAgICAgZm9yIHtuYW1lLCB2YWx1ZX0gPC0gZnVuY3MsIGRvOiBkZWYgdW5xdW90ZShuYW1lKSgpLCBkbzogdW5xdW90ZSh2YWx1ZSkKICAgICAgZW5kCiAgICBlbmQpCiAgZW5kCgogIGRlZiBtYWluIGRvCiAgICBzZXR1cChmb286IDQyKQoKICAgIElPLmluc3BlY3QgUnVudGltZUxvb2t1cC5mb28oKQogIGVuZAplbmQKCkZvby5tYWlu