为什么 Ruby 忽略了 heredoc 中的连续回车符



我使用heredoc制作了一些简单的示例数据,例如:

> str = <<TEXT
  abc^M^M^M
  def^M^M^M^M
TEXT

现在看看这个字符串的内容:

> p str
"abcrrndefrrrn"

请注意,三个回车符变为两个"r",四个回车符变为三个"r"。 我也尝试了%q()语法,结果相同。 将相同的数据放入文件中并读取它会产生具有正确"r"数的正确字符串。

也许问题与"如何在 Ruby here 文档中保留/维护连续换行符?

PS:这既发生在文件中运行脚本,也发生在使用 Ruby 1.8.7-p371、1.9.3-p392 和 2.0.0-p247 的irb中。

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

str = <<TEXT
  abc^M^M^M
  def^M^M^M^M
TEXT
str # => "  abc^M^M^Mn  def^M^M^M^Mn"
str = <<TEXT
  abc

  def


TEXT
str # => "  abcnnnn  defnnnnn"

Ruby 使用""作为行尾,如果我没记错的话,它会在内部与行尾进行转换。Ruby 知道各种操作系统所需的行端,并在读取/写入文本文件时尝试转换为该行端,因此在文件 I/O 期间可能会发生转换。

str = <<TEXT
  abcnnn
  defnnnn
TEXT
str # => "  abcnnnn  defnnnnn"
puts str
# >>   abc
# >> 
# >> 
# >> 
# >>   def
# >> 
# >> 
# >> 
# >> 

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

相关内容

  • 没有找到相关文章

最新更新