Batch delegate functions to a module?

When you delegate a bunch of functions to the same module, is there a way to batch delegate them?

Instead of

defdelegate a1(), to: ABC
defdelegate a2(), to: ABC
defdelegate a3(), to: ABC

something like

defdelegate to: ABC do
  a1()
  a2()
  a3()
end

You can use some simple meta programming like this:

defmodule Delegate do
  @delegate_functions ~w(a b c d e f)a
  
  for fun <- @delegate_functions do
    defdelegate unquote(fun)(), to: OtherModule
  end
end
7 Likes

This is a very valid way but for what it’s worth I’d either add all delegates by hand or make a short sed or awk script do it for me.

Using metaprogramming for such a simple task hurts readability and the ease of future reverse-engineering effort required to maintain the code.

Just adding nuance to your already valid advice.