How to convert an integer to a string in Erlang?

后端 未结 5 772
野的像风
野的像风 2020-12-24 04:30

I know strings in Erlang can be costly to use. So how do I convert \"5\"to 5?

Is there anything like io:format(\"~p\",[5]) tha

5条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-24 05:26

    The following is probably not the neatest way, but it works:

    1> lists:flatten(io_lib:format("~p", [35365])).
    "35365"
    

    EDIT: I've found that the following function comes in useful:

    %% 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)).
    

    EDIT 2 (in response to comments): the above function came from a small program I wrote a while back to learn Erlang. I was looking for a string-formatting function and found the behaviour of io_lib:format/2 within erl counter-intuitive, for example:

    1> io_lib:format("2 + 2 = ~p", [2+2]).
    [50,32,43,32,50,32,61,32,"4"]
    

    At the time, I was unaware of the 'auto-flattening' behaviour of output devices mentioned by @archaelus and so concluded that the above behaviour wasn't what I wanted.

    This evening, I went back to this program and replaced calls to the string_format function above with io_lib:format. The only problems this caused were a few EUnit tests that failed because they were expecting a flattened string. These were easily fixed.

    I agree with @gleber and @womble that using this function is overkill for converting an integer to a string. If that's all you need, use integer_to_list/1. KISS!

提交回复
热议问题