gpt4 book ai didi

ruby - 为 put 设置行尾字符

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:22 24 4
gpt4 key购买 nike

我有一组要打印的条目。

作为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#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

关于ruby - 为 put 设置行尾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com