2015-09-06 53 views
-2

此腳本旨在從一個文件獲取數據並將其複製到另一個文件。我被瞭解Ruby的困難的方法挑戰寫一行代碼,所以:學習Ruby The Hard Way:未定義的方法`關閉'

from_file, to_file = ARGV 
output = open(to_file, 'w').write(File.read(from_file)) 
output.close 

我在一個終端上鍵入ruby ex17.rb test.txt new_file.txt並且得到錯誤:

undefined method `close' for "new_file.txt":String (NoMethodError) 

使用我無法關閉任何文件腳本。如果我保持所有方法open,writeread分開,我沒有問題關閉的事情。我讀File.read自動關閉文件,但我只讀from_fileto_file會不會開放?

一些單證使用File.open(),但我還沒有發現有必要,也沒有學習Ruby困難的方法建議其使用,添加File.打開一個文件。 open(filename)似乎在自己的工作。但對於read,似乎有必要編寫File.read。爲什麼與用法不一致?

+0

「File.read」是否自動關閉文件取決於您是否將其與塊一起使用。 – sawa

回答

0

IO#write返回寫入的字節數,因此,您不能對其調用close

如果您需要單行的解決方案,你可以嘗試一旦執行塊

open(to_file, 'w') { |f| f.write (File.read(from_file)) } 

[IO#open][2]將關閉流,沒有明確的close需要。 同樣,IO#read一旦文件被完全讀取就關閉流,不需要明確的close