ruby - 为 put 设置行尾字符

标签 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 在一行中打印所有数组项,然后添加 $\,而我想要 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/

相关文章:

ruby-on-rails - 即使记录也存在,如何返回 .save() 的成功? -- rails 3.1

ruby - 在分析 ruby​​ 应用程序时是否可以忽略不相关的方法?

ruby-on-rails - 带 Rails 的 Redis

javascript - 未捕获的类型错误 : Cannot read property 'submit' of null for stripe payment

ruby-on-rails - `where` 取 `true` 或 `false`

Ruby RJB 无法创建 Java VM 错误

java - Windows 上的 Ruby 32 位和 Java 64 位

ruby-on-rails - 使用 form_for 和 form_tag 同时传递参数

ruby-on-rails - 索引 View 中的新操作

ruby-on-rails - Ruby 1.9.1 真的准备好并更快地部署新的 Rails 了吗?