将整数转换为Erlang中的string
我知道,应该避免Erlangstring不惜一切代价…
但是如果我不这样做,我怎样才能从5中产生“5”?
特别是,有没有像io:format(“〜p”,[5])会返回一个格式化的string,而不是打印到一个stream?
以下可能不是最新的方式,但它的作品:
1> lists:flatten(io_lib:format("~p", [35365])). "35365"
编辑:我发现以下function有用:
%% string_format/2 %% Like io:format except it returns the evaluated string rather than write %% it to standard output. %% Parameters: %% 1. format string similar to that used by io:format. %% 2. list of values to supply to format string. %% Returns: %% Formatted string. string_format(Pattern, Values) -> lists:flatten(io_lib:format(Pattern, Values)).
编辑2 (回复评论):上面的函数来自一个我写了一个小的程序,而后来学习Erlang。 我正在寻找一个string格式化函数,并在erl
发现了io_lib:format/2
的行为 – 反直觉的,例如:
1> io_lib:format("2 + 2 = ~p", [2+2]). [50,32,43,32,50,32,61,32,"4"]
当时,我并不知道@archaelus提到的输出设备的“自动平坦化”行为,所以得出的结论是,上述行为不是我想要的。
今天晚上,我回到这个程序,并用io_lib:format
replace上面string_format
函数的调用。 这导致的唯一的问题是几个EUnittesting失败,因为他们期望一个扁平的string。 这些很容易修复。
我同意@gleber和@womble使用这个函数是一个整数转换为string矫枉过正。 如果这就是你所需要的,使用integer_to_list/1
。 吻!
还有integer_to_list/1
,这正是你想要的,没有丑陋。
一个string是一个列表:
9> integer_to_list(123). "123"
另外,如果您需要处理浮点数的string表示forms,您应该查看Bob Ippolito在mochinum上所做的工作 。
列表:CONCAT([号码])。 也有效。