如何在Erlang中返回带格式的字符串?

3j86kqsm  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(181)

假设您正在用golang编写代码,您可以执行以下操作:

str := fmt.Sprintf("%d is bigger than %d", 6, 4)

二郎呢?

mcvgt66p

mcvgt66p1#

Erlang等效值为

Str = io_lib:format("~p is bigger than ~p", [6, 4])

请注意,即使结果在技术上可能不是字符串,通常也不需要通过调用lists:flatten将其转换为字符串。format函数的结果通常是 iolist 的特殊情况。实际上,所有预期字符串的Erlang函数也接受iolist作为参数。
上面的“通常”表示“如果格式字符串中没有使用Unicode修饰符”,大多数情况下不需要使用Unicode修饰符,可以直接使用format的结果,如上所述。

nsc4cvqm

nsc4cvqm2#

有一个io_lib:format/2可以完成这个任务,但是要注意它返回的可能是字符的嵌套列表,而不是字符串。要想得到一个合适的字符串,你必须在后面使用flatten/1

lists:flatten(io_lib:format("~p is bigger than ~p", [6, 4]))
eni9jsuy

eni9jsuy3#

要将io_lib:format/2与Unicode字符一起使用,请执行以下操作:

50> X = io_lib:format("~s is greater than ~s", [[8364], [36]]). 
** exception error: bad argument
     in function  io_lib:format/2
        called as io_lib:format("~s is greater than ~s",[[8364],"$"])

51> X = io_lib:format("~ts is greater than ~s", [[8364], [36]]).
[[8364],
 32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,
 32,"$"]

52> io:format("~s~n", [X]).                                     
** exception error: bad argument
     in function  io:format/2
        called as io:format("~s~n",
                            [[[8364],
                              32,105,115,32,103,114,101,97,116,101,114,32,116,
                              104,97,110,32,"$"]])
        *** argument 1: failed to format string

53> io:format("~ts~n", [X]).
€ is greater than $
ok

相关问题