我想要打印一系列条目。
作为 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,这是否可行?
答案 0 :(得分:6)
Ruby变量$\
将为打印和写入的调用设置记录分隔符:
>> $\ = '!!!'
=> "!!!"
>> print 'hi'
hi!!!=> nil
或者,如果您导入English模块,则可以将$\
称为$OUTPUT_RECORD_SEPARATOR
。
Kernel#puts
相当于STDOUT.puts
;并且IO.puts
“在每个尚未以换行符结束的元素之后写入换行符”。所以对于数组的纯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