ruby - 艰苦学习 Ruby ex17 额外学分 3 - 合并为一行

标签 ruby learn-ruby-the-hard-way

对于练习 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)}
  1. 是否有更好/不同的方式将其压缩成一行?

  2. 有人可以帮助解释我创建的行吗?我根据与这个问题无关的各种问题/答案创建了这个。我已经尝试过查找我所做的事情,但我还是有点迷茫,想要全面了解它。

最佳答案

  1. 类似于使用 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]))
    

    我个人认为这同样可以理解,并且缺少错误检查是等价的。

  2. 您正在使用 File#open用一个 block 以只写模式打开 to_file ( 'w' )。在该 block 内,您可以使用 f 访问打开的文件,并且该文件将在该 block 终止时为您关闭。 IO::read读取 from_file 的全部内容,然后将其传递给 IO#writef(File 是 IO 的子类)上,将这些内容写入 f(这是 to_file 的打开的只写文件) .

关于ruby - 艰苦学习 Ruby ex17 额外学分 3 - 合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198582/

相关文章:

javascript - 可以处理 Javascript 的 Ruby HTTP 客户端?

ruby - 如何使用 RDoc 标记呈现逐字/代码/前置加号?

ruby - Net::SSH:创建一个可以与之交互的 ruby​​ SSH 服务器有多容易?

ruby-on-rails - 执行 Rails 命令的速度非常低

Ruby gets.chomp 和 $stdin.gets.chomp 区别

ruby - Ruby 中的 While 循环和转换为函数

Ruby 名称错误 - 未初始化的常量

ruby-on-rails - rails : checking which controller method was called from within the model

ruby - 学习 Ruby the Hardway ex。 42. 2 个文件中的 2 个类

ruby - 使用 Ruby 将一个数组插入另一个数组,并返回方括号