IO做什么?

时间:2014-06-05 18:55:44

标签: ruby

(0,IO :: SEEK_SET)在方法倒带中做了什么?我理解其余的代码,但老实说我坚持(0,IO :: SEEK_SET)。

input_file = ARGV[0]

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

def rewind(f)
  f.seek(0, IO::SEEK_SET)
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 three lines:"

current_line = 1
print_a_line(current_line, current_file)

current_line = current_line + 1
print_a_line(current_line, current_file)

current_line = current_line + 1
print_a_line(current_line, current_file)

2 个答案:

答案 0 :(得分:3)

seek(amount,whence = IO :: SEEK_SET)→0
根据 whence 的值,在流中寻找给定的偏移金额

:CUR or IO::SEEK_CUR  | Seeks to _amount_ plus current position
----------------------+--------------------------------------------------
:END or IO::SEEK_END  | Seeks to _amount_ plus end of stream (you
                      | probably want a negative value for _amount_)
----------------------+--------------------------------------------------
:SET or IO::SEEK_SET  | Seeks to the absolute location given by _amount_

http://www.ruby-doc.org/core-2.1.2/IO.html#method-i-seek

答案 1 :(得分:2)

当您指定要搜索的位置时,通常有三种方法可以执行此操作

SEEK_SET: from the start of the file (ie: absolute)
SEEK_CUR: from the current position (ie: relative)
SEEK_END: from the end of the file

因此,在您的情况下,rewind方法只是寻找文件的开头。