【发布时间】:2021-10-06 05:13:45
【问题描述】:
我正在尝试使用 Elixir 中的元编程生成 100 个函数
我希望函数返回一个在编译时计算的值
def func(0) do
"you have 0 chances"
end
def func(1) do
"you have 1 chances"
end
...
def func(100) do
"you have 100 chances"
end
我的第一次尝试是
0..100 |> Enum.each fn val ->
def func(unquote(val)) do
val_string = to_string(unquote(val))
"you have " <> val_string <> " chances"
end
end
但我有理由相信这只会返回 100 个在编译时未评估的函数。
我终于试过了
0..100 |> Enum.each fn vol ->
defmacro func(unquote(vol) = vol) do
quote do
"you have " <> unquote(vol) <> " chances" |> unquote
end
end
end
但是当我需要该文件并在 iex 中调用 func(1) 时,我得到了
** (CompileError) iex:2: undefined function func/1
首先我的 defmacro 逻辑是否正确?知道我可能做错了什么。
【问题讨论】: