applywill only work with functions, not macros. First you need to check if you really need macros, because many problems can (and should) be solved only with the help of functions. In this case, you can simply use definstead defmacro:
defmodule Hoge1 do
for fun_name <- [:foo, :bar] do
def unquote(fun_name)(arg) do
apply(Hoge2, unquote(fun_name), [arg])
end
end
end
defmodule Hoge2 do
for fun_name <- [:foo, :bar] do
def unquote(fun_name)(arg) do
IO.puts "hoge2"
end
end
end
, , apply:
Hoge2.unquote(fun_name)(arg)
Hoge2 Hoge1, Hoge2 Hoge1. :
defmodule Hoge2 do
for fun_name <- [:foo, :bar] do
defmacro unquote(fun_name)(arg) do
IO.puts "hoge2"
end
end
end
defmodule Hoge1 do
require Hoge2
for fun_name <- [:foo, :bar] do
defmacro unquote(fun_name)(arg) do
Hoge2.unquote(fun_name)(arg)
end
end
end