PP
PP
PP는 Ruby 객체를 예쁘게(pretty) 출력해 주는 프린터예요. 구조를 들여쓰기해 여러 줄로 펼쳐 보여주기 때문에, 복잡한 객체의 내부를 살펴볼 때 훨씬 읽기 편하죠.
출처: Ruby 4.0 API
본문
PP는 무엇을 하나요
p로 출력하면 객체가 한 줄로 길게 나와요.
#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>
pp로 출력하면 이렇게 구조가 들여쓰기로 펼쳐져요.
#<PP:0x81fedf0
@buffer=[],
@buffer_width=0,
@genspace=#<Proc:0x81feda0>,
@group_queue=
#<PrettyPrint::GroupQueue:0x81fed3c
@queue=
[[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
[]]>,
@group_stack=
[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
@indent=0,
@maxwidth=79,
@newline="\n",
@output=#<IO:0x8114ee4>,
@output_width=2>
사용법
pp(obj) #=> obj
pp obj #=> obj
pp(obj1, obj2, ...) #=> [obj1, obj2, ...]
pp() #=> nil
위 코드는 객체를 예쁜 프린트 형식으로 $>에 출력해요. 그리고 인자로 받은 객체를 그대로 돌려주죠.
출력 커스터마이즈
자기 클래스에 맞는 출력 형식을 정의하고 싶다면 클래스 안에서 pretty_print(pp) 메서드를 다시 정의하면 돼요. 단, pretty_print(pp)를 재정의하기 전에 require 'pp'가 있어야 해요.
pretty_print는 PP 클래스의 인스턴스인 pp 인자를 받아요. 이 메서드는 객체를 출력할 때 text, breakable, nest, group, pp 같은 메서드를 사용해요.
JSON을 예쁘게 출력하기
JSON을 예쁘게 출력하려면 JSON#pretty_generate를 참고하세요.
Author
Tanaka Akira [email protected]
Constants
VERSION
버전 문자열
Public Class Methods
pp(obj, out=$>, width=width_for(out))
obj를 out에 width 열 너비로 예쁘게 출력해요. out을 생략하면 $>를 가정하고, width를 생략하면 out의 너비를 사용해요(width_for 참고). PP.pp는 out을 돌려줘요.
sharing_detection()
공유 검출(shared-object) 플래그를 불리언 값으로 돌려줘요. 기본값은 false(nil)예요.
sharing_detection=(b)
공유 검출 플래그를 b로 설정해요.
singleline_pp(obj, out=$>)
PP.pp처럼 obj를 out에 출력하되, 들여쓰기와 줄바꿈 없이 한 줄로 출력해요. PP.singleline_pp는 out을 돌려줘요.
width_for(out)
out에 사용할 수 있는 너비를 돌려줘요. out의 너비로는 다음 규칙을 따라요.
out이 tty 장치에 연결돼 있으면 그 장치의 너비를 사용해요.- 그 외의 경우이거나 너비를 구하지 못하면
COLUMN환경 변수가 너비로 설정돼 있다고 가정해요. COLUMN이 0이 아닌 숫자로 설정돼 있지 않으면80을 가정해요.
마지막으로 위에서 구한 너비 값에서 1을 뺀 값을 돌려줘요. 이 -1은 Windows 명령 프롬프트 때문이에요. 마지막 칼럼에 닿으면 커서를 다음 줄로 옮기거든요.