처음에 erlang을 시작했을 때, String Format이 매우 특이해서 놀랐습니다. 보통, '%'나 '\'를 많이 쓰는데 erlang은 '~'를 사용합니다. erlang Document에 자세히 나와있지만, 간단하고 많이 사용하는것을 한번 알아보겠습니다. erlang Document는 다음을 참고하시면 됩니다.
http://erlang.org/doc/man/io.html#format-2
~c
C는 ASCII Code형식을 받습니다. 여기서 ~x.yc라는 형식을 쓸 수 있는데, 여기서 x는 구문이 차지할 칸수이고, y는 반복할 횟수입니다. 여기서 x가 -이면, 왼쪽 정렬을 하게 됩니다. 예제를 보면 쉽게 이해 할 수 있습니다.
1> io:format("|~10.5c|~-10.5c|~5c|~n",[$a, $b, $c]).
| aaaaa|bbbbb |ccccc|
ok
2> io:format("|~10.5c|~-20.5c|~5c|~n",[$a, $b, $c]).
| aaaaa|bbbbb |ccccc|
ok
3> io:format("|~10.20c|~-10.5c|~5c|~n",[$a, $b, $c]).
** exception error: bad argument
in function io:format/3
called as io:format(<0.27.0>,"|~10.20c|~-10.5c|~5c|~n","abc")
~f
f는 유추할 수 있듯이 float형 변수를 표시합니다.
~w 그리고 ~p
가장 많이 사용하고 가장 햇깔리는 것이 이것인것 같습니다. ~w와 ~p는 거의 같은 것이라고 볼 수 있습니다. Java의 toString()과 비슷한 것인데, ~w와 ~p는 차이가 있습니다. 하나는, ~p는 ~w에 비해서 출력을 할 때, indent가 있다는 것과 만약에 출력 가능한 Character로 이루어진 경우 String형식으로 출력 합니다. 예제를 보면 다음과 같습니다.
7> T = [{attributes,[[{id,age,1.50000},{mode,explicit},
7> {typename,"INTEGER"}], [{id,cho},{mode,explicit},{typename,'Cho'}]]},
7> {typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}].
[{attributes,[[{id,age,1.5},
{mode,explicit},
{typename,"INTEGER"}],
[{id,cho},{mode,explicit},{typename,'Cho'}]]},
{typename,'Person'},
{tag,{'PRIVATE',3}},
{mode,implicit}]
8> io:format("~w~n", [T]).
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,[73,78,84,69,71,69,82]}],[{id,cho},{mode,explicit},{typename,'Cho'}]]},{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}]
ok
9> io:format("~p~n", [T]).
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,"INTEGER"}],
[{id,cho},{mode,explicit},{typename,'Cho'}]]},
{typename,'Person'},
{tag,{'PRIVATE',3}},
{mode,implicit}]
ok
위의 예제를 보면 알 듯이, ~w에 비해서, ~p는 [73,78,84,69,71,69,82]를 "INTEGER로 출력해줍니다. 또한, indent를 해줍니다.
~W 그리고 ~P
~W와 ~P는 각각 ~w와 ~p와 같지만, 출력의 depth를 설정할 수 있습니다.
'00. Functional Programming > erlang' 카테고리의 다른 글
erlang Garbage collection (0) | 2016.05.22 |
---|---|
erlang CrashDump Viewer & CrashDump 추출 (0) | 2016.04.23 |
erlang에서 _Var와 Var의 차이 (0) | 2016.04.04 |