Можете ли вы указать тип c в макросе? Если так, похоже, это работает нормально:
defmodule UniqueCharacters do
defmacro make_wild_function_name do
function_name = String.to_atom("baz:foo.bar")
quote do
@spec unquote(function_name)() :: :ok
def unquote(function_name)(), do: :ok
end
end
end
defmodule TestSpec do
import UniqueCharacters
make_wild_function_name()
end
Мне кажется, что объединение typepe c с определением имеет наибольший смысл; этого достаточно?
Редактировать: Похоже, это тоже работает, хотя и неаккуратно:
defmodule UniqueCharacters do
defmacro make_wild_function_name do
function_name = String.to_atom("baz:foo.bar")
quote do
def unquote(function_name)(), do: :ok
end
end
end
defmodule TestSpec do
import UniqueCharacters
@spec unquote(:'baz:foo.bar')() :: :ok
make_wild_function_name()
end