a

Size: a a a
a

Aß
a
Aß
АЮ
defmacro true_cost(a, b, c, d, e) do
quote do
fragment("TRUE_COST(?, ?, ?, ?, ?)", unquote(a), unquote(b), unquote(c), unquote(d), unquote(e))
end
end
АЮ
АЮ
defmacro true_cost(opts_ast) do
{opts, _} =
Code.eval_quoted(opts_ast, Macro.Env.vars(__CALLER__),
file: __CALLER__.file,
line: __CALLER__.line
)
{a, opts} = Keyword.pop!(opts, :a)
{b, opts} = Keyword.pop!(opts, :b)
{c, opts} = Keyword.pop!(opts, :c)
{d, opts} = Keyword.pop!(opts, :d)
{e, opts} = Keyword.pop!(opts, :e)
quote do
fragment("TRUE_COST(?, ?, ?, ?, ?)", unquote(a), unquote(b), unquote(c), unquote(d), unquote(e))
end
end
a
true_cost(a, b, c, free_based_loan(d, e), f)
АЮ
defmacro free_based_loan(d, e) do
quote do
fragment("FREE_BASED_LOAN(?, ?)", unquote(d), unquote(e))
end
end
АЮ
defmacrop (приватный макрос, по аналогии с defp) и объявляешь его до использования (т.е. выше функции, где его применяешь).a
АЮ
Code.eval_quoted/3 нужен для того, чтобы он ast нормально у тебя в опциях обрабатывал.АЮ
TRUE_COST) слишком много параметров.АЮ
a
VV
LL
bif на сишечкеLL
Enum.sort(), карочеVV
VV