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
3条答案
按热度按时间mcvgt66p1#
Erlang等效值为
请注意,即使结果在技术上可能不是字符串,通常也不需要通过调用
lists:flatten
将其转换为字符串。format函数的结果通常是 iolist 的特殊情况。实际上,所有预期字符串的Erlang函数也接受iolist作为参数。上面的“通常”表示“如果格式字符串中没有使用Unicode修饰符”,大多数情况下不需要使用Unicode修饰符,可以直接使用
format
的结果,如上所述。nsc4cvqm2#
有一个
io_lib:format/2
可以完成这个任务,但是要注意它返回的可能是字符的嵌套列表,而不是字符串。要想得到一个合适的字符串,你必须在后面使用flatten/1
:eni9jsuy3#
要将
io_lib:format/2
与Unicode字符一起使用,请执行以下操作: