官方文档 没有指定。我知道EOFError表示“文件结尾错误”,但这到底意味着什么?如果文件读取器到达文件的末尾,那对我来说并不像是一个错误。
EOFError 在所有的 IO 操作中都非常方便,它是 Ruby 中所有输入/输出操作的基础类。同时也要记住 Unix 的核心概念:一切皆文件。这包括 sockets。因此,如果你打开了某个 socket 并从中读取数据,在遇到文件结尾时就会出现异常情况。
所有的示例都展示了 EOFError 的一些简单用法(比如读取文本文件),但这些用法并不是真正有用的。然而,如果你深入挖掘 net/http 或其他大量使用 sockets 的类,你会发现这个异常被广泛使用。
编辑后添加了来自 net/ftp 的示例:
def getline
line = @sock.readline # if get EOF, raise EOFError
line.sub!(/(\r\n|\n|\r)\z/n, "")
if @debug_mode
print "get: ", sanitize(line), "\n"
end
return line
end
EOFError(文件结尾错误)是在您试图对已经引用到文件结尾的文件对象执行操作时抛出的。在这个例子中,我们试图readline
读取不存在的行。
例如:
import_file = File.open(filename)
begin
while (line = import_file.readline)
sline = FasterCSV.parse_line(line)
# Do stuff with sline
end
rescue EOFError
# Finished processing the file
end
不需要使用EOFError也可以实现同样的功能:
File.open(filename).each do |line|
sline = FasterCSV.parse_line(line)
# Do stuff with sline
end