1

我正在通过“Learn Ruby the Hard Way”工作,并在尝试在此处运行示例文件时收到未定义的方法“关闭”错误:http ://ruby.learncodethehardway.org/book/ex17.html

我的代码,具体是:

from_file, to_file = ARGV
script = $0

puts "Copying from #{from_file} to #{to_file}."

input = File.open(from_file).read()
puts "The input file is #{input.length} bytes long."

puts "Does the output file exist? #{File.exists? to_file}"
puts "Ready, hit RETURN to contine, CTRL-C to abort."
STDIN.gets

output = File.open(to_file, 'w')
output.write(input)

puts "Alright, all done."

output.close()
input.close()

我收到的错误仅适用于最后一行“input.close()”,因为“output.close()”似乎工作正常。作为参考,我正在使用一个预先存在的输入文件,并创建一个新的输出文件。

提前致谢。

4

1 回答 1

5

由于方法调用,您input不是文件对象:read()

input = File.open(from_file).read()

由于read返回nil""取决于要读取的长度参数,因此调用input.close()将引发undefined method close,因为input在您的情况下是一个字符串并且String没有close()方法。

因此,您可以只调用以下方法,而不是调用File.open(from_file).read()和调用该方法:close()File.read()

from_file, to_file = ARGV
script = $0

puts "Copying from #{from_file} to #{to_file}."

input = File.read(from_file)
puts "The input file is #{input.length} bytes long."

puts "Does the output file exist? #{File.exists? to_file}"
puts "Ready, hit RETURN to contine, CTRL-C to abort."
STDIN.gets

output = File.open(to_file, 'w')
output.write(input)

puts "Alright, all done."

output.close()
于 2013-12-24T17:10:25.210 回答