为puts设置行尾字符

我有一系列我想要打印的条目。

作为数组,我只是写:

puts arr 

然后我需要使用DOS格式的行尾:\ r \ n,所以我写道:

 arr.each { |e| print "#{e}\r\n" } 

这是正常的,但我想知道是否有一种方法来指定使用什么行尾格式,以便我可以写如下:

 $eol = "\r\n" puts arr 

更新1

我知道puts将使用正确的行结尾,具体取决于它运行的平台,但我需要这个,因为我会将输出写入文件。

更新2正如Mark建议的那样,设置$ \是有用的。 无论如何它只适用于打印 。 例如,

 irb(main):001:0> a = [1, 2, 3] => [1, 2, 3] irb(main):002:0> $\ = "\r\n" => "\r\n" irb(main):003:0> print a 123 => nil irb(main):004:0> puts a 1 2 3 => nil 

print在一行上打印所有数组项,然后添加$ \ ,而我想要puts的行为:在数组的每个项之后添加$ \
如果没有使用Array#,这有可能吗?

Ruby变量$\将为打印和写入调用设置记录分隔符:

 >> $\ = '!!!' => "!!!" >> print 'hi' hi!!!=> nil 

或者,如果导入英语模块,则可以将$\引用为$OUTPUT_RECORD_SEPARATOR


Kernel#puts相当于STDOUT.puts ; 和IO.puts “在每个尚未以换行符结束的元素之后写入换行符”。 所以你对arrays的纯粹puts运气不好。 但是, $,变量是参数suck之间的分隔符字符串输出,如Kernel#printArray#join 。 因此,如果您可以处理调用print arr.join ,这可能是您正在做的最佳解决方案:

 >> [1,2,3].join => "123" >> $, = '---' => "---" >> [1,2,3].join => "1---2---3" >> $\ = '!!!' => "!!!" >> print [1,2,3].join 1---2---3!!!=> nil