有没有办法在Elixir中动态生成原子?

Shi*_*Lee 4 erlang elixir

有没有办法在Elixir中动态声明原子?

喜欢str = "aaa"和我们想创建一个叫做的原子:aaa.

rya*_*ter 9

是的你可以.

但是,您需要小心,因为原子不是垃圾收集的,并且您可以拥有的原子数量有限制(默认限制为1,048,576).它可能看起来很多,但如果您的应用程序运行很长时间并且您正在动态生成原子,那么您最终将达到极限.

它被普遍认为是一个坏主意动态生成它们.

但是,要回答你的问题.是.

例:

iex(1)> str = "aaa"
"aaa"

iex(2)> String.to_atom(str)
:aaa

iex(3)> :foo
:foo

iex(4)> String.to_existing_atom("foo")
:foo

iex(5)> String.to_existing_atom("bar")
** (ArgumentError) argument error
    :erlang.binary_to_existing_atom("bar", :utf8)
Run Code Online (Sandbox Code Playgroud)

  • 所以你可以用`for x < - 1..1050000,do:String.to_atom Integer.to_string(x)`来崩溃这个过程.谢谢. (3认同)