what is the purpose of f.seek(0)
in this script? Why do we need to rewind(current_file)
, if the file has already been opened by the program?
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)
inject(:+) is not Symbol#to_proc, :+ has no special meaning in the ruby language - it's just a symbol.
The and keyword in Ruby takes two expressions and returns “true” if both are true, and “false” if one or more of them is false. This keyword is an equivalent of && logical operator in Ruby, but with lower precedence.
It seeks ("goes to", "attempts to find") a given position (as integer) in a stream. In your code you define a new method called rewind
which takes one argument. When you call it with
rewind(current_file)
you send the current_file (the one you have opened from disk or from anywhere else) which is defined as:
current_file = File.open(input_file)
to the rewind method and it will "seek" to position 0 which is the beginning of the file.
You could also create another method called almost_rewind
and write:
def almost_rewind(f)
f.seek(-10, IO::SEEK_END)
end
This would go 10 positions backwards in your stream, starting from the END of the stream.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With