对于练习 17,通过搜索其他回复,我能够将以下内容压缩成一行(如额外学分 #3 中所要求的)
from_file, to_file = ARGV
script = $0
input = File.open(from_file)
indata = input.read()
output = File.open(to_file, 'w')
output.write(indata)
output.close()
input.close()
我能够将它浓缩成:
from_file, to_file = ARGV
script = $0
File.open(to_file, 'w') {|f| f.write IO.read(from_file)}
是否有更好/不同的方式将其压缩成一行?
有人可以帮助解释我创建的行吗?我根据与这个问题无关的各种问题/答案创建了这个。我已经尝试过查找我所做的事情,但我还是有点迷茫,想要全面了解它。
最佳答案
类似于使用
IO::read
为了简化“只需将整个文件读入一个字符串”,您可以使用IO::write
到“只需将字符串写入文件”:from_file, to_file = ARGV IO.write(to_file, IO.read(from_file))
由于您不使用
script
,因此可以将其删除。如果你真的想把事情精简到一行,你可以这样做:IO.write(ARGV[1], IO.read(ARGV[0]))
我个人认为这同样可以理解,并且缺少错误检查是等价的。
您正在使用
File#open
用一个 block 以只写模式打开to_file
('w'
)。在该 block 内,您可以使用f
访问打开的文件,并且该文件将在该 block 终止时为您关闭。IO::read
读取from_file
的全部内容,然后将其传递给IO#write
在f
(File 是 IO 的子类)上,将这些内容写入f
(这是to_file
的打开的只写文件) .
关于ruby - 艰苦学习 Ruby ex17 额外学分 3 - 合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198582/