2011-07-26 1 views
6

저는 루비를 처음 접했고 현재 Pickaxe 책을 읽고 모든 것을 익숙하게하고 있습니다. 필자는 File.open 섹션에 걸쳐 블록을 File.open 호출의 매개 변수로 사용하여 파일이 닫혀 있음을 보장하는 방법을 설명했습니다. 이제는 발에서 자신을 쏘는 것을 피하는 절대적으로 훌륭한 방법 인 것 같고 발가락이 위험 할 정도로 낮기 때문에 나는 그것을 줄 것이라고 추측합니다. 여기에 (그 중요한 경우 IRB에서) 내가 쓴 것입니다 :File.open and blocks in Ruby 1.8.7

File.open('somefile.txt', 'r').each { |line| puts line }`` 

내 기대가 파일 somefile.txt이 열기, 읽기, 인쇄, 오른쪽, 폐쇄 얻을 것입니까? 내가 아는 한 잘못 알 수 있습니다. 열린 파일 핸들을보기 위해 lsof을 사용하면 여전히 열려 있습니다. 그러나 내가이 예에서 잘못된 블록을 사용하고 있습니까

f = File.open('somefile.txt', 'r').each { |line| puts line } 
f.close() 

을하거나 만약 내가 블록 함께 사용하면 File.open의 의미를 이해하지 못했다. 나는 ruby-doc.org related to File.open에 관한 섹션을 읽었다. 그러나 그것은 단지 내가하고있는 것이 예상대로 일해야한다는 것을 확인하는 것으로 보인다.

내가 뭘 잘못하고 있는지 설명 할 수 있습니까? 블록 후 파일을 닫습니다하기 위해

답변

8

, 당신은 each에하지, 직접 File.open()에 블록을 통과해야합니다

File.open('somefile.txt', 'r') do |f| 
    f.each_line { |l| puts l } 
end 

File.open(…).each {…}

단지를 닫지 않고 열려있는 파일 반복된다.

+0

File.open ('somefile.txt', 'r') {| f | f.each_line {| line | puts line}}도 작동합니다. 감사! – OldTroll