我有一组要打印的条目。
作为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 在一行中打印所有数组项,然后添加 $\,而我想要 puts 的行为:添加 $\ 在数组的每一项之后。
如果不使用 Array#each,这是否可能?
最佳答案
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
关于ruby - 为 put 设置行尾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856038/