有没有办法在没有宏的情况下动态构建原子名称?

Pau*_*iro 0 elixir

我想动态构建一个原子列表,它们可以没有或者有不同的后缀,例如:

fields = [:title#{suffix}, :body#{suffix}]
Run Code Online (Sandbox Code Playgroud)

有没有印记(或其他简单方法)?
或者这里的宏是否足够简单?

Igo*_*dov 8

是的,有一个创造原子的印记

~w(foo)a => :foo
Run Code Online (Sandbox Code Playgroud)

您可以在符号内使用插值来动态创建原子:

~w(title#{suffix} body#{suffix})a
Run Code Online (Sandbox Code Playgroud)


Dog*_*ert 5

你可以通过:在字符串前加一个字符串来完成这个,字符串里面可以包含插值:

iex(1)> suffix = "_foo"
"_foo"
iex(2)> fields = [:"title#{suffix}", :"body#{suffix}"]
[:title_foo, :body_foo]
Run Code Online (Sandbox Code Playgroud)

  • 只是为此添加一个注释,Erlang VM中允许有最大数量的原子.此数字默认为1,048,576.像这样动态创建原子可能会导致VM崩溃,或者如果您正在使用少量内存,则可能会导致OOM崩溃. (2认同)