[ruby] 프린트와 풋의 차이점은 무엇입니까?

내가 쓴 코드 행의 예를 들어 printputs다른 결과를 생성합니다.

1.upto(1000).each { |i| print i if i % 2 == 0 }



답변

puts 각 인수의 끝에 새 줄을 추가합니다 (없는 경우).

print 새 줄을 추가하지 않습니다.


예를 들면 다음과 같습니다.

puts [[1,2,3], [4,5,nil]] 돌아올 것이다 :

1
2
삼
4
5

print [[1,2,3], [4,5,nil]]
반품 하는 반면 :

[[1,2,3], [4,5, nil]]

puts는 nil 값을 출력하지 않지만 print는 어떻게 출력되는지 주목하십시오.


답변

큰 차이점은 배열을 표시하는 것입니다. 특히 NIL을 가진 것들. 예를 들면 다음과 같습니다.

print [nil, 1, 2]

준다

[nil, 1, 2]

그러나

puts [nil, 1, 2]

준다

1
2

빈 항목이없는 항목은 나타나지 않으며 각 항목은 다른 행에 있습니다.


답변

print각 인수 뒤에 $,, to $stdout,을 차례로 출력합니다 $\. 그것은args.join($,) + $\

puts세트 모두 $,$\에 “\ n”은 다음과 같은 일을한다 print. 주요 차이점은 각 인수가 와 함께 새 줄이 있다는 것입니다 puts.

사용자에게 친숙한 이름으로require 'english' 전역 변수에 액세스 할 수 있습니다 .


답변

API 문서 는 좋은 힌트를 제공합니다.

print() → nil

print(obj, ...) → nil

주어진 객체를 ios에 씁니다 . 를 반환 nil합니다.

쓰기 위해 스트림을 열어야합니다. 문자열이 아닌 각 주어진 객체는 to_s메소드 를 호출하여 변환됩니다 . 인수없이 호출하면의 내용을 인쇄합니다 $_.

출력 필드 구분 기호 ( $,)가 아닌 nil경우 객체 사이에 삽입됩니다. 출력 레코드 구분 기호 ( $\)가 아닌 nil경우 출력에 추가됩니다.

puts(obj, ...) → nil

주어진 객체를 ios에 씁니다 . 개행 시퀀스로 끝나지 않은 개행 후에 개행을 씁니다. 를 반환 nil합니다.

쓰기 위해 스트림을 열어야합니다. 배열 인수와 함께 호출되면 각 요소를 새 줄에 씁니다. 문자열이나 배열이 아닌 각 주어진 객체는 to_s메소드 를 호출하여 변환됩니다 . 인수없이 호출하면 단일 줄 바꿈이 출력됩니다.

위의 요점을 약간 실험 해 보면 차이점은 다음과 같습니다.

  • 여러 인수 print를 사용하여 ‘출력 필드 구분 기호’ $,(기본값은 없음)로 puts구분하고 개행으로 구분합니다. puts또한 마지막 인수 뒤에 개행을 print넣지 만 그렇지 않습니다.

    2.1.3 :001 > print 'hello', 'world'
    helloworld => nil
    2.1.3 :002 > puts 'hello', 'world'
    hello
    world
     => nil
    2.1.3 :003 > $, = 'fanodd'
     => "fanodd"
    2.1.3 :004 > print 'hello', 'world'
    hellofanoddworld => nil
    2.1.3 :005 > puts 'hello', 'world'
    hello
    world
     => nil
  • puts자동으로 배열의 압축을 풉니 다 print.

    2.1.3 : 001> 인쇄 [1, [2, 3]], [4]
    [1, [2, 3]] [4] => nil
    2.1.3 : 002> 풋 [1, [2, 3]], [4]
    1
    2
    삼
    4
     => nil
  • print인수없이 인쇄하고 $_(마지막으로 읽은 것 gets) puts개행 을 인쇄합니다.

    2.1.3 :001 > gets
    hello world
     => "hello world\n"
    2.1.3 :002 > puts
    
     => nil
    2.1.3 :003 > print
    hello world
     => nil
  • print$\인쇄 후 출력 레코드 구분 기호 를 puts쓰고이 변수는 무시합니다.

    mark@lunchbox:~$ irb
    2.1.3 :001 > $\ = 'MOOOOOOO!'
     => "MOOOOOOO!"
    2.1.3 :002 > puts "Oink! Baa! Cluck! "
    Oink! Baa! Cluck!
     => nil
    2.1.3 :003 > print "Oink! Baa! Cluck! "
    Oink! Baa! Cluck! MOOOOOOO! => nil

답변

putsto_s각 인수 의 를 호출하고 새 줄로 끝나지 않으면 각 문자열에 새 줄을 추가합니다.
print그냥를 호출하여 각 인수를 출력하십시오 to_s.

예를 들면
puts "one two":
one two

{새 줄}

puts "one two\n":
one two

{new line} #puts는 문자열이 새 줄로 끝나기 때문에 결과에 새 줄을 추가하지 않습니다.

print "one two":
one two

print "one two\n":
one two

{새 줄}

그리고 출력하는 또 다른 방법이 있습니다. p

각 객체에 대해 obj.inspect를 직접 작성하고 프로그램의 표준 출력에 개행을 씁니다.

디버깅 메시지를 출력하는 데 도움이됩니다.
p "aa\n\t":aa\n\t


답변

를 사용하여 문자열 내에서 배열을 출력 puts하려면 다음을 사용하는 것과 동일한 결과를 얻습니다 print.

puts "#{[0, 1, nil]}":
[0, 1, nil]

그러나 인용 된 문자열을 사용하지 않으면 예. 유일한 차이점은 우리가 사용할 때 줄 바꿈 puts입니다.


답변