为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#print
和Array#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