본문 바로가기

00. Functional Programming/erlang

erlang io:format과 같은 String Format

처음에 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