为什么我不能使用`filename.open'而不是`open(filename)'?

时间:2015-03-25 13:48:18

标签: ruby

在这段允许您阅读终端文件的代码中,为什么需要使用open(filename)而不是filename.open

filename = ARGV.first
txt = open(filename)
puts "Here's your file #{filename}:"
print txt.read
print "Type the filename again: "
file_again = $stdin.gets.chomp
txt_again = open(file_again)
print txt_again.read 

3 个答案:

答案 0 :(得分:2)

您无法使用filename.open,因为filename是一个字符串,方法open未在字符串中定义

使用File#open

File.open(filename)

答案 1 :(得分:0)

File.open("file")

打开一个本地文件并返回一个文件对象。这里File#open是File类的方法。

open("file")

实际上是Kernel#open并查看字符串以决定如何处理它。

琐碎事情:

  • File.open("file")专门告诉Ruby打开一个文件。
  • 如果open("file") Ruby检查字符串"file"以确定它是什么类型(这里是一个文件)并打开相应的类型,则会抛出相应的错误。

答案 2 :(得分:0)

Ruby有一个用于以面向对象的方式处理路径的类:Pathname

require 'pathname'

loop do
  print 'Enter filename: '
  pn = Pathname(gets.chomp)
  if pn.file?
    puts "Here's your file '#{pn}':", pn.read
  elsif pn.exist?
    puts 'That is not a file.'
  else
    puts 'File does not exist.'
  end
end