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_printPP 클래스의 인스턴스인 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))

objoutwidth 열 너비로 예쁘게 출력해요. out을 생략하면 $>를 가정하고, width를 생략하면 out의 너비를 사용해요(width_for 참고). PP.ppout을 돌려줘요.

sharing_detection()

공유 검출(shared-object) 플래그를 불리언 값으로 돌려줘요. 기본값은 false(nil)예요.

sharing_detection=(b)

공유 검출 플래그를 b로 설정해요.

singleline_pp(obj, out=$>)

PP.pp처럼 objout에 출력하되, 들여쓰기와 줄바꿈 없이 한 줄로 출력해요. PP.singleline_ppout을 돌려줘요.

width_for(out)

out에 사용할 수 있는 너비를 돌려줘요. out의 너비로는 다음 규칙을 따라요.

  • out이 tty 장치에 연결돼 있으면 그 장치의 너비를 사용해요.
  • 그 외의 경우이거나 너비를 구하지 못하면 COLUMN 환경 변수가 너비로 설정돼 있다고 가정해요.
  • COLUMN이 0이 아닌 숫자로 설정돼 있지 않으면 80을 가정해요.

마지막으로 위에서 구한 너비 값에서 1을 뺀 값을 돌려줘요. 이 -1은 Windows 명령 프롬프트 때문이에요. 마지막 칼럼에 닿으면 커서를 다음 줄로 옮기거든요.