, , :
defmacro condition_function(field, guard) do
clause1 = quote do: (unquote(field) when unquote(guard) -> true)
clause2 = quote do: (_ -> false)
fun_clauses = clause1 ++ clause2
result = {:fn, [], fun_clauses}
IO.inspect(result)
result
end
iex. , , :
iex> quote do: fn
...> xfield when xfield > 2 -> true
...> _ -> false
...> end
{:fn, [],
[{:->, [],
[[{:when, [],
[{:xfield, [], Elixir},
{:>, [context: Elixir, import: Kernel], [{:xfield, [], Elixir}, 2]}]}],
true]}, {:->, [], [[{:_, [], Elixir}], false]}]}
IO.inspect :
iex(9)> myFun = Builder.condition_function(myfield, myguard)
{:fn, [],
[{:->, [],
[[{:when, [], [{:myfield, [line: 9], nil}, {:myguard, [line: 9], nil}]}],
true]}, {:->, [], [[{:_, [], Builder}], false]}]}
( 9 iex.)
, unquote(myfield) unquote(myguard) , .
, , , , . , , .