为puts设置行尾字符

时间:2010-05-18 09:40:17

标签: ruby

我想要打印一系列条目。

作为 arr 数组,我只是用来写:

puts arr

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

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

这可以正常工作,但我想知道是否有办法指定使用哪种行尾格式,以便我可以编写如下内容:

$eol = "\r\n"
puts arr

更新1

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

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

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 在一行上打印所有数组项,然后添加 $ \ ,而我想要put的行为:添加 $ \ 在阵列的每个项目之后。
如果不使用Array#each,这是否可行?

1 个答案:

答案 0 :(得分:6)

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

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

或者,如果您导入English模块,则可以将$\称为$OUTPUT_RECORD_SEPARATOR


Kernel#puts相当于STDOUT.puts;并且IO.puts“在每个尚未以换行符结束的元素之后写入换行符”。所以对于数组的纯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