【问题标题】:Ruby - printing a "loop" to fileRuby - 将“循环”打印到文件
【发布时间】:2015-10-21 04:26:36
【问题描述】:

考虑以下代码:

(1..10).each do |i| 
   thing1 = i


    aFile = File.new("input.txt", "r+")
    if aFile
        aFile.syswrite(thing1)
    else
        puts "Unable to open file!"
    end
end

我正在尝试将 i 的每个值(在本例中为 1、2、3、...、10)打印到由一行分隔的文件中:

1
2
3
...
9
10

知道下面的代码只保存最新的输出(“10”),我该怎么做。

谢谢!

【问题讨论】:

    标签: ruby io


    【解决方案1】:

    使用文件#puts

    知道下面的代码只保存最新的输出(“10”),我该怎么做。

    不要那样做。请改用File#puts

    File.open('file', 'w') do |f|
      (1..10).each { |i| f.puts i }
    end
    

    写一个数组而不是循环

    请注意,上面的内容可以更快更紧凑地编写为:

    File.open('file', 'w') { |f| f.puts (1..10).to_a }
    

    通过对#puts 的单个方法调用将数组写入文件,而不是每次迭代写入一次。不过,文件中的结果保持不变。

    【讨论】:

    • 你也可以使用puts *(1..10)
    • @GaganGami 是的,但是需要解释将 Range 放入数组中,这超出了原始问题或预期答案的范围。然而,它当然可以做到,即使它以牺牲意图和可读性为代价只节省了三个字符的代码。源代码应该力求清晰而不是聪明。 YMMV,但您的 splat 符号已被适当地注意到以供后代使用。感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2016-07-27
    • 2021-06-17
    • 2018-08-04
    • 2021-07-17
    • 2013-10-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多