Ruby에서 데이터를 인쇄하는 5가지 방법

빠른 색인

  • print vs puts
  • puts
  • print


  • p vs pp vs ap
  • p
  • pp
  • ap

  • How they actually work
  • References

  • 인쇄 대 넣다



    가장 먼저 주목해야 할 것은 콘텐츠를 인쇄하지만 둘 다 nil 를 반환한다는 것입니다.

    넣다


  • 반환 끝에 새 줄을 추가합니다
  • .
  • to_s 메소드를 호출하여 모든 것을 문자열로 변환하려고 시도합니다.

  • irb(main):002:0> puts "take a look at where the cursor is :) "
    take a look at where the cursor is :) 
    => nil                                  
    
    irb(main):004:0> 2.times {puts "hey you!"}
    hey you!
    hey you!                                                                        
    => 2     
    
    # Puts converts everything it cans to string
    irb(main):031:0> puts [1,nil,nil,2]
    1
    
    
    2
    => nill             
    


    인쇄


  • 여기에 새 줄이 추가되지 않았습니다.

  • irb(main):001:0> print "you should not see a new line at the end"
    you should not see a new line at the end => nil
    
    irb(main):003:0> 2.times {print "hey you!"}
    hey you!hey you! => 2
    
    print [1,nil,nil,2]
    [1, nil, nil, 2] => nil
    
    


    p 대 pp 대 ap



    개체의 원시 버전을 표시(반환)하므로 디버깅에 더 유용합니다.

    끝에 줄 바꿈을 추가한다는 점에서 puts와 유사하지만 to_s를 호출하는 대신:


  • inspect 메서드를 호출합니다.

  • irb(main):033:0> p 1
    1
    => 1                                             
    irb(main):034:0> p '1'
    "1"
    => "1"                                           
    irb(main):035:0> 
    



    irb(main):035:0> puts 1
    1
    => nil                                           
    irb(main):036:0> puts '1'
    1
    => nil                                           
    irb(main):037:0> puts '1'.inspect
    "1"
    => nil 
    
    


    PP


  • pretty_inspect 메서드를 호출합니다. 복잡한 중첩 개체를 처리할 때 더 유용합니다.

  • irb(main):038:0> data = [ false, 42, %w(forty two), { :now => Time.now, :class =
    > Time.now.class, :distance => 42e42 } ]
    => 
    [false,                                                                         
    ...                                                                             
    irb(main):039:0> pp data
    [false,
     42,                                                                            
     ["forty", "two"],                                                              
     {:now=>2022-06-09 12:06:44.161486 -0400, :class=>Time, :distance=>4.2e+43}]    
    =>                                                                              
    [false,                                                                         
     42,                                                                            
     ["forty", "two"],                                                              
     {:now=>2022-06-09 12:06:44.161486 -0400, :class=>Time, :distance=>4.2e+43}]    
    irb(main):040:0> 
    


    ap


  • 가장 최근 버전의 Ruby에는 ap가 포함되어 있지 않습니다[이 기사를 작성할 당시, ruby ​​3.1.2]. 다음을 실행하여 설치해야 합니다.

  • gem install awesome_print
    


    irb 세션에 require "awesome_print"를 추가해야 합니다.

    irb(main):002:0> require "awesome_print"
    => true
    irb(main):003:0> data = [ false, 42, %w(forty two), { :now => Time.now, :class =
    > Time.now.class, :distance => 42e42 } ]
    => 
    [false,                                 
    ...                                     
    irb(main):004:0> ap data
    [
        [0] false,                             
        [1] 42,                                
        [2] [                                  
            [0] "forty",                       
            [1] "two"                          
        ],                                     
        [3] {                                  
                 :now => 2022-06-09 12:56:59.184906 -0400,
               :class => Time < Object,
            :distance => 4.2e+43
        }
    ]
    => nil
    
    


    실제로 작동하는 방식



    그들은 모두 $stdout 전역 변수를 사용합니다. 현재 표준 출력을 나타냅니다.

    오늘 우리가 이야기한 방법은 $stdout 전역 변수를 사용하여 메시지를 전송하여 컴퓨터의 출력 스트림(운영 체제와 통신)과 통신하고 메시지를 콘솔에 출력합니다.


    참조


  • Module Kernel Doc
  • Puts, Print and Return
  • Puts vs Print
  • Awesome Print Repository
  • 좋은 웹페이지 즐겨찾기