With the following code:
defmodule Foobar do
defmacro b(arg) do
arg
|> String.split("\n")
|> IO.inspect()
end
defmacro a() do
other(&b/1)
end
def other(thing), do: thing
end
during compilation of this module this error occurs:
** (FunctionClauseError) no function clause matching in String.split/3
The following arguments were given to String.split/3:
# 1
{:x1, [], :elixir_fn}
# 2
"\n"
# 3
[]
Attempted function clauses (showing 4 out of 4):
def split(string, %Regex{} = pattern, options) when is_binary(string) and is_list(options)
def split(string, "", options) when is_binary(string) and is_list(options)
def split(string, [], options) when is_binary(string) and is_list(options)
def split(string, pattern, options) when is_binary(string) and is_list(options)
(elixir 1.15.5) lib/string.ex:478: String.split/3
(stdlib 5.0.2) erl_eval.erl:750: :erl_eval.do_apply/7
(stdlib 5.0.2) erl_eval.erl:1026: :erl_eval.expr_list/7
(stdlib 5.0.2) erl_eval.erl:456: :erl_eval.expr/6
expanding macro: Foobar.b/1
#cell:opffgr7vdttksyult6zxtm6vlvo6paax:1: (file)
This implies that the code is being executed, but how and why?