2012-11-28 71 views
4

在Ruby的文件它給的例子:我的問題是,爲什麼重新f2重新打開IO流與只是用新流

f1 = File.new("testfile") 
f2 = File.new("testfile") 
f2.readlines[0] #=> "This is line one\n" 
f2.reopen(f1)  #=> #<File:testfile> 
f2.readlines[0] #=> "This is line one\n" 

時,你可以只f2.closef1.readlines[0]?重新開放新流與使用新流有什麼優勢?

回答

1

我跟一些開發者在IRB了一段時間後,我得到的迴應是,它主要用於改變$std變量修改其中的方法,如putsprint輸出到...

$stdout.reopen(File.open('log')) 
puts 'hello world' 

之所以使用這個,而不是...

$stdout = File.open('log') 

...在空中還挺雖則。我有一個開發者說,直接任務並沒有很好地發揮一些Ruby的C函數。我不知道很多關於C和不能說太多關於這一點,但他向我指出一些minitest source看到使用它的例子。然而,顯然甚至源頭已經轉到直接分配與重新開放,因爲開發商上次看到它。

總之...從它的外觀IO#reopen可能是無用的,但我很想聽到一個反對這個論據。

更新

好了,我重讀了的文檔,發現有對reopen第二組OPTS的:

reopen(path, mode_str) → ios 

其實,這似乎有點用的,而不是給reopen(other_IO) → ios選項。