首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置puts的行尾字符

设置puts的行尾字符
EN

Stack Overflow用户
提问于 2010-05-18 09:40:17
回答 1查看 6.8K关注 0票数 3

我有一系列的条目我想打印。

作为数组的一部分,我曾经只是写:

代码语言:javascript
复制
puts arr

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

代码语言:javascript
复制
arr.each { |e| print "#{e}\r\n" }

这是正确的,但我想知道是否有一种方法可以指定使用哪种行结束格式,这样我就可以编写如下内容:

代码语言:javascript
复制
$eol = "\r\n"
puts arr

更新1

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

更新2如马克所建议的,设置$_是有用的。不管怎样,它只适用于_print。例如,

代码语言:javascript
复制
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

打印单行上的所有数组项,然后添加$_,而我想要puts的行为:在数组的每个项之后添加$_。

如果不使用Array#each,这是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-18 10:42:24

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

代码语言:javascript
复制
>> $\ = '!!!'
=> "!!!"
>> print 'hi'
hi!!!=> nil

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

Kernel#puts等同于STDOUT.putsIO.puts“在没有以换行符结尾的每个元素之后写一个换行符”。所以,对于数组来说,纯粹的puts是不走运的。但是,$,变量是Kernel#printArray#join参数之间的分隔字符串输出。因此,如果您能够处理调用print arr.join,这可能是您正在做的事情的最佳解决方案:

代码语言:javascript
复制
>> [1,2,3].join
=> "123"
>> $, = '---'
=> "---"
>> [1,2,3].join
=> "1---2---3"
>> $\ = '!!!'
=> "!!!"
>> print [1,2,3].join
1---2---3!!!=> nil
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2856038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档