Eshell V12.2.1 (abort with ^G)
1> A1=[1,2,3].
[1,2,3]
2> io:format("~p~n", A1).
** exception error: bad argument
in function io:format/2
called as io:format("~p~n",[1,2,3])
*** argument 1: wrong number of arguments
3> A2=[[1,2,3]].
[[1,2,3]]
4> io:format("~p~n", A2).
[1,2,3]
ok
5>
难道 io:format 直接打印变量参数的话,需要变量是嵌套列表?求老司机解惑为什么要这样设计(本人 erlang 新手)。
如果直接在调用 io:format 的时候,给参数传递一个列表参数的表达式也就不会报错。
https://stackoverflow.com/questions/2523250/erlang-ioformat-and-a-hanging-web-application 这里我 google 到的一个疑问解答,但还是有些不明白 io:format 调用的时候,传递变量参数和列表表达式的区别。
1
ifsclimbing 355 天前
好的,看起来你在 Erlang 代码中遇到了一个错误。让我解释一下发生了什么。
在 Erlang 中,当你使用`io:format/2`函数并带有“~p”格式说明符时,它期望一个单一的参数,而不是一个列表。当你尝试使用`io:format("~p~n", A1).`时,它把列表`[1,2,3]`视为三个单独的参数,从而导致错误。 另一方面,当你用`A2=[[1,2,3]].`给`A2`赋了一个嵌套列表,然后使用`io:format("~p~n", A2).`时,它正常工作,因为嵌套列表被视为单个参数。 如果你想使用`io:format/2`打印列表`[1,2,3]`,你应该将列表展平,或者使用`~w`格式说明符,它可以处理列表: ```erlang A1 = [1, 2, 3], io:format("~w~n", [A1]). ``` 这应该会打印: ``` [1,2,3] ``` 或者,你可以展平列表: ```erlang A1 = [1, 2, 3], io:format("~p~n", [lists:flatten(A1)]). ``` 这也会打印: ``` [1,2,3] ``` |
2
ifsclimbing 355 天前
|
3
themoment OP @ifsclimbing 感谢,大概明白了。还没有去了解 elixir ,目前在看 erlang
|