2012-07-23 2 views
4

가능한 중복 :IRB 출력을 억제 하시겠습니까?

>> for a in 1..5 do 
?>  puts a 
>> end 
1 
2 
3 
4 
5 
=> 1..5 
>> 

가 어떻게 출력 => 1..5을 억제 않습니다
Rails console, how to stop output of return value?

은 IRB에서이 세션을 고려? 이것은 내가 레일 콘솔 세션에서이 작업을 수행 할 경우에 중요하다

for post in Post.find(:all) do 
    if post.submit_time > Time.now 
     puts "Corrupted post #{post.id} is from the future" 
    end 
end 

나는 모든 게시물 마지막에 배열로 인쇄하고 싶지 않아요. 출력을 어떻게 억제합니까?

find_each 또는 Ruby 스크립트와 같은 다른 방법이 있지만 대화식 세션에서이 작업을 수행하는 데 더 많은 관심이 있습니다.

+0

비슷한 질문을 참조하십시오 [여기] (http://stackoverflow.com/questions/10150541/rails-console-how-to-stop-output-of-return-value) , [여기] (http://stackoverflow.com/questions/4678732/how-to-suppress-rails-console-irb-outputs) 및 블로그 게시물 [here] (http://austinruby.com/2006/ 10/6/quieting-irb-s-return-value) – pjumble

답변

17

명령 끝에 nil을 추가하기 만하면됩니다. 그것은 irb의 응답 라인을 죽이지는 않지만 큰 물체를 가지고 있다면 화면 폭파를 피할 수 있습니다.

1.9.3p194 :036 > for a in 1..5 do; puts a; end; nil 
1 
2 
3 
4 
5 
=> nil 
3

이것은 핵심 IRB 기능입니다. 수식을 입력하면 값이 인쇄됩니다. 이 경우 값은 1..5입니다. 다른 출력은 단지 부작용입니다.

그러나 반환 된 (및 인쇄 된) 값을 "최소화"할 수 있습니다. 따라서 대규모 AR 모델 대신 많은 것을 반환 할 수 있습니다.

이 같은 것을보십시오 :

% irb 
1.9.3p194 :001 > for a in 1..5 do 
1.9.3p194 :002 >  puts a 
1.9.3p194 :003?> end; nil 
1 
2 
3 
4 
5 
=> nil 
2

당신은 단순히 다음 일은 실행하고, IRB는 결코 그 결과의 지문 없습니다까지 실제로 명령을 실행 연기됩니다 명령에 세미콜론 (;)를 추가 할 수 있습니다. 이것은 nil을 입력하는 것보다 빠르며, 다른 명령을 바로 실행하면 부작용이 눈에 띄지 않습니다.

빠른 예 :

irb(main):001:0> def foo; puts 'foo'; end 
=> nil 
irb(main):002:0> foo 
foo 
=> nil 
irb(main):003:0> foo; 
irb(main):004:0* 42 
foo 
=> 42