2014-02-07 63 views
12

該腳本中f.seek(0)的用途是什麼?爲什麼我們需要rewind(current_file),如果文件已經被程序打開了?.seek在ruby中的含義

input_file = ARGV[0] 

def print_all(f) 
    puts f.read() 
end 

def rewind(f) 
    f.seek(0) 
end 

def print_a_line(line_count,f) 
puts "#{line_count} #{f.readline()}" 
end 

current_file = File.open(input_file) 

puts "First Let's print the whole file:" 
puts # a blank line 

print_all(current_file) 

puts "Now Let's rewind, kind of like a tape" 

rewind(current_file) 

puts "Let's print the first line:" 

current_line = 1 
print_a_line(current_line, current_file) 
+1

http://ruby-doc.org/core-2.0/IO.html#method-i-seek – Matt

+1

它**裏面有一個名爲'rewind'的方法,是不是給了你一個提示?如果不是,你不能閱讀文檔嗎? – meagar

+0

我完成我解決它謝謝反正 –

回答

17

它尋找(「去」,「試圖找到」)流中的給定位置(作爲整數)。在你的代碼中,你定義了一個名爲rewind的新方法,它接受一個參數。當你與

rewind(current_file) 

叫它您發送current_file其定義爲(你從磁盤打開或從其他地方之一):

current_file = File.open(input_file) 

到倒帶方法,它會「尋求「到位置0,這是文件的開始。

例如,您可以創建一個名爲almost_rewind,寫的另一種方法:

def almost_rewind(f) 
    f.seek(-10) 
end 

這會去的10個位置回你的信息流中。

+4

謝謝尼古拉,因爲他是唯一一個有足夠正直回答的人。你的答案比Ruby文檔更清晰。如果只有更多的SOers像你一樣。 – Padawan

+3

如果只有Ruby文檔被編寫爲由不知道答案的人閱讀。 –

+0

'f.seek(-10)'或傳遞偶數'-1'總會產生:'無效參數@ rb_io_seek - test.txt(Errno :: EINVAL)' – VisWebsoft