【问题标题】:create atom from string and numbers in erlang在erlang中从字符串和数字创建原子
【发布时间】:2017-06-20 21:39:34
【问题描述】:

我是 Erlang 的新手,我想从字符串和格式创建原子。我也不确定如何在 erlang 中使用循环。这个 sudo 代码就是我想要的:

For (int i = 0; i++; i < 10) {
    list_to_atom(lists:flatten(io_lib:format("certfile~B", [i])))
}

如何在 Erlang 中使用它?

【问题讨论】:

  • 不确定我是否理解问题。为您的函数提供输入数据和预期输出。
  • 如果您对 Erlang 有任何疑问,最好在 special room 中提问。这种格式更方便,因为关于 SO 的每个问题都必须具体。
  • 请注意,在 Erlang 中动态生成原子通常是个坏主意!问题是它们没有被垃圾收集,所以如果你创建太多它会导致虚拟机崩溃
  • 感谢您的 cmets.. Asier 的回答正是我所需要的。

标签: for-loop erlang


【解决方案1】:

您可以将lists:map/2 函数与lists:seq/2 一起使用:

lists:map(fun(I)->
           list_to_atom(lists:flatten(io_lib:format("certfile~B", [I])))
         end, lists:seq(1,10)).

lists:seq/2 将生成一个数字列表,lists:map/2 将其更改为您想要的输出。

【讨论】:

    【解决方案2】:

    ...并使用列表推导:

    ɐuıɥɔɐɯ@uplink:~/Workshop/Erlang$ erl
    Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]
    
    Eshell V8.3  (abort with ^G)
    1> R = lists:seq(1, 10).
    [1,2,3,4,5,6,7,8,9,10]
    2> [list_to_atom(lists:flatten(io_lib:format("certfile~B", [X]))) || X <- R].
    [certfile1,certfile2,certfile3,certfile4,certfile5,
     certfile6,certfile7,certfile8,certfile9,certfile10]
    3> 
    

    干杯!

    顺便说一句,我不确定你是否意识到这一点,但是在 Erlang 中动态地生成原子有点不鼓励。您可以使用/创建的原子数量有限(相当多,但有限),它们不会被垃圾回收。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多