Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Ruby会忽略heredoc中的连续回车?_Ruby_String_Heredoc - Fatal编程技术网

为什么Ruby会忽略heredoc中的连续回车?

为什么Ruby会忽略heredoc中的连续回车?,ruby,string,heredoc,Ruby,String,Heredoc,我使用了一个heredoc来生成一些简单的示例数据,如: > str = <<TEXT abc^M^M^M def^M^M^M^M TEXT 注意三个回车变成两个“\r”s,四个回车变成三个“\r”s。我还尝试了%q()语法,得到了相同的结果。将相同的数据放入一个文件并读取它会产生一个正确的字符串,其编号为“\r”s 这个问题可能与“”有关 注意:在文件中运行脚本和在irb中使用Ruby 1.8.7-p371、1.9.3-p392和2.0.0-p247都会发生这种情况

我使用了一个heredoc来生成一些简单的示例数据,如:

> str = <<TEXT
  abc^M^M^M
  def^M^M^M^M
TEXT
注意三个回车变成两个
“\r”
s,四个回车变成三个
“\r”
s。我还尝试了
%q()
语法,得到了相同的结果。将相同的数据放入一个文件并读取它会产生一个正确的字符串,其编号为“\r”s

这个问题可能与“”有关


注意:在文件中运行脚本和在
irb
中使用Ruby 1.8.7-p371、1.9.3-p392和2.0.0-p247都会发生这种情况

以下是Ruby在MacOS系统上看到的内容:

str = <<TEXT
  abc^M^M^M
  def^M^M^M^M
TEXT
str # => "  abc^M^M^M\n  def^M^M^M^M\n"

str = <<TEXT
  abc



  def




TEXT
str # => "  abc\n\n\n\n  def\n\n\n\n\n"
str=>
# >> 
# >> 
#>>def
# >> 
# >> 
# >> 
# >> 

如果在Windows上使用IO、文件作为“文本”文件或puts输出最后一个
str
,Ruby应输出正确的行尾,将LF字符转换为CRLF组合。换句话说,除非您正在编写二进制数据,否则您不必跳转到特定于操作系统或文件类型的输出行尾。

您需要包括您的Ruby版本以及如何运行它。我正试图将其作为二进制数据处理,正是因为我试图故意操纵行尾。此外,如果您在响应中实际看到“^M”,我认为您输入的内容不正确--如果您使用
CTRL-V
CTRL-M
键入,Ruby将在
str.inspect
中显示
\r
。我正在使用您的示例中的内容,通过复制和粘贴编辑页面时可见的内容,这是原始来源。如果您使用的是二进制数据,您应该在问题中这样说,因为这是必不可少的。heredoc实际上不适合生成二进制数据。CNTRL-V CNTRL-M到
“\r”
的转换正是我在源代码中所期望的,因为字符串中的字符是相同的,而herdoc是相同的。相反,如果要保证不进行行尾转换,则应使用
pack
,并在打开文件时使用所需的“b”标志。
str = <<TEXT
  abc^M^M^M
  def^M^M^M^M
TEXT
str # => "  abc^M^M^M\n  def^M^M^M^M\n"

str = <<TEXT
  abc



  def




TEXT
str # => "  abc\n\n\n\n  def\n\n\n\n\n"
str = <<TEXT
  abc\n\n\n
  def\n\n\n\n
TEXT
str # => "  abc\n\n\n\n  def\n\n\n\n\n"
puts str
# >>   abc
# >> 
# >> 
# >> 
# >>   def
# >> 
# >> 
# >> 
# >>