“File.read” 和 “IO.read” 有什么区别?

34

我正在使用 Ruby 和 Ruby on Rails 3,我想知道...

... 什么是区别?

File.read("filename.txt")

IO.read("filename.txt")

2个回答

35

编辑注:此答案已过时。自 Ruby 2.6 版本开始,File.read 的行为有所不同,对于以“|”字符开头的文件名,它不会调用外部命令(issuecommit)。

因为File是IO类的子类并且没有read方法,所以当您调用File.read时,实际上是在调用IO.read, 这里没有任何区别。


2
令人惊讶的是,这个旧答案没有评论。IO.read并不完全相同:IO.read('| whoami') # => "sourav\n"。但是File.read('| whoami')会引发Errno :: ENOENT。因此,在涉及安全问题的读取用户给定值时,IO.read并不安全。Rubocop也对此发出了警告。 - 15 Volts
1
@S.Goswami 您是正确的 - 自 Ruby 2.6 起,File.read 不会调用外部命令(问题提交记录)。 - tom

19

File是IO的一个子类,而File.read就是IO.read(File类没有这个方法,所以当调用read时会调用IO.read)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接