PP 클래스

PP 클래스

Ruby 객체를 예쁘게 출력해 주는 pretty-printer예요.

출처: Ruby 3.3 API

본문

PP가 하는 일 (What PP Does)

보통 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>>

pretty-print로 출력하면 이렇게 보기 좋게 정리돼요.

#<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>

사용법 (Usage)

pp(obj)             #=> obj
pp obj              #=> obj
pp(obj1, obj2, ...) #=> [obj1, obj2, ...]
pp()                #=> nil

obj(s)$>에 pretty-print 형식으로 출력해요. 그리고 obj(s)를 그대로 반환해요.

출력 커스터마이징 (Output Customization)

자기 클래스에 딱 맞는 pretty-print 함수를 정의하려면, 클래스 안에서 #pretty_print(pp) 메서드를 재정의하면 돼요. 재정의 전에 require 'pp'가 필요한 점만 기억해 두면 좋아요.

#pretty_printpp 인자를 받는데, 이는 PP 클래스의 인스턴스예요. 이 메서드는 text, breakable, nest, group, pp를 써서 객체를 출력해요.

JSON pretty-print (Pretty-Print JSON)

JSON을 예쁘게 출력하려면 JSON#pretty_generate를 참고해요.

저자: Tanaka Akira <[email protected]>

상수 (Constants)

  • VERSION

Public Class Methods

pp (obj, out=$>, width=width_for(out))

objoutwidth 컬럼 너비로 pretty-print 형식으로 출력해요.

out을 생략하면 $>로 간주해요. width를 생략하면 out의 너비(라고 width_for가 정한 값)를 사용해요.

PP.ppout을 반환해요.

sharing_detection ()

공유 감지 플래그를 boolean 값으로 반환해요. 기본값은 false(nil)예요.

sharing_detection= (b)

공유 감지 플래그를 b로 설정해요.

singleline_pp (obj, out=$>)

objPP.pp처럼 출력하되 들여쓰기와 개행 없이 한 줄로 출력해요.

PP.singleline_ppout을 반환해요.

width_for (out)

out에 사용할 수 있는 너비를 반환해요. out의 너비는 다음과 같이 정해져요.

  • out이 tty 디바이스에 연결돼 있으면 그 너비를 사용해요.
  • 그렇지 않거나 값을 얻지 못하면 COLUMN 환경변수가 너비로 설정돼 있다고 가정해요.
  • COLUMN이 0이 아닌 숫자로 설정돼 있지 않으면 80으로 가정해요.

마지막으로 위에서 구한 너비 값에서 1을 뺀 값을 반환해요. 이 -1은 Windows 명령 프롬프트가 마지막 컬럼에 도달하면 커서를 다음 줄로 옮기기 때문이에요.