Elixir中的源代码生成
我目前正在学习/阅读元编程长生不老药Elixir中的源代码生成,elixir,Elixir,我目前正在学习/阅读元编程长生不老药 我成功地生成了一个函数,该函数使用宏输入其名称: defmodule MyMacros do defmacro fun_gen(name) do atom_name = elem(name, 0) str_name = atom_name |> to_string quote do def unquote(name) do IO.puts unquote(str_name) end
我成功地生成了一个函数,该函数使用宏输入其名称:
defmodule MyMacros do
defmacro fun_gen(name) do
atom_name = elem(name, 0)
str_name = atom_name |> to_string
quote do
def unquote(name) do
IO.puts unquote(str_name)
end
end
end
end
defmodule My do
require MyMacros
MyMacros.fun_gen(bar)
end
结果是:
iex(1)> My.bar
bar
:ok
这很好:)但我想知道是否可以使用Enum生成几个函数。每个函数或类似的函数:
defmodule MyMacros do
defmacro fun_gen(name) do
atom_name = elem(name, 0)
str_name = atom_name |> to_string
quote do
def unquote(name) do
IO.puts unquote(str_name)
end
end
end
end
defmodule My do
require MyMacros
loop (~w(foo bar baz) do
MyMacros.fun_gen(item)
end
end
是否有一种循环的方式来生成源代码?
谢谢大家!
您完全可以不使用宏来执行此操作:
defmodule My do
@方法~w |一二三| a
我的方法一
一
iex>我的第二个
二
或使用宏:
defmodule MyMacros do
defmacro gen_funs(名称)do
我的名字是My2.one
一
iex>My2.2
二
注意:我们将列表直接传递给
gen\u funs
,而不是包含列表的符号或变量。我们必须这样做,因为宏收到引用的参数。这就是为什么必须在宏中执行循环,而不是在使用宏的模块中执行循环。Cool!原子在内部表示为它们自己,这很方便:)谢谢you@BenNG是的,还有名单<代码>[:一、二、三]==引用do:[:一、二、三]