2015-04-15 2 views
0
filename = ARGV.first 

txt = open filename 

puts "Here's your file #{filename}:" 
print txt.read 

puts "Type the filename again: " 
file_again = $stdin.gets.chomp 

txt_again = open file_again 

print txt_again.read 

close(txt) 
close(txt_again) 

Программа прекрасно работает до конца, но вылетает с сообщением об ошибке под названием сразу после печати содержимого второго файла.Неопределенный метод «закрыть» для главного: Object (NoMethodError) в Рубине

Я проверил txt, txt_again, используя (.class), и подтвердил, что оба являются объектами File. Почему не работает?

+0

в то время как ответ является технически правильным для использования 'File.read (TXT)' или 'File.open (.txt, &: чтение)' как само закрытие. Это означает, что вы можете открыть и прочитать файл без необходимости его закрытия. – engineersmnky

+0

@engineersmnky Я никогда не видел этот синтаксис 'File.open (txt, &: read)': D –

+0

@engineersmnky Согласно этому http://stackoverflow.com/questions/5545068/what-are-all-the-common -ways-to-read-a-file-in-ruby, только File.open (txt, &: read) является самозакрывающимся, File.read (txt) - нет. Открытый метод должен быть передан блоком для его самозакрывания –

ответ

5

Вы должны вызвать close на файл объекта:

txt.close