有没有一种简单的方法来在Ruby中执行多行缩进字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (161)

假设我想用我的ruby代码内嵌一大块非常漂亮的html代码。什么是最干净的方法来做到这一点,而不会丢失我的字符串格式或不必记住某种gsub正则表达式。

将它全部编码在一行中很容易做到,但难以阅读:

1.times do
  # Note that the spaces have been changed to _ so that they are easy to see here.
  doc = "\n<html>\n__<head>\n____<title>\n______Title\n____</title>\n__</head>\n__<body>\n____Body\n__</body>\n</html>\n"
  ans = "Your document: %s" % [doc]
  puts ans
end

ruby中的多行文本更容易阅读,但字符串不能与其余代码一起缩进:

1.times do
  doc = "
<html>
  <head>
    <title>
      Title
    </title>
  </head>
  <body>
    Body
  </body>
</html>
"
  ans = "Your document: %s" % [doc]
  puts ans
end

例如,下面的代码是用我的代码缩进的,但是现在字符串在每行前面都有四个额外的空格:

1.times do
  doc = <<-EOM

    <html>
      <head>
        <title>
          Title
        </title>
      </head>
      <body>
        Body
      </body>
    </html>
  EOM
  ans = "Your document: %s" % [doc]
  puts ans
end

大多数人使用上面的HEREDOC代码,并对结果执行正则表达式替换,以在每行开始处取出额外的空白。我希望有一种方法,我不必每次都要经历重新编程的麻烦。

提问于
用户回答回答于
用户回答回答于

自Ruby 2.3以来:

def make_doc(body)
  <<~EOF
  <html>
    <body>
      #{body}
    </body>
  </html>
  EOF
end

puts make_doc('hello')

对于较早的Ruby版本:

def make_doc(body)
  "<html>\n"       \
  "  <body>\n"     \
  "    #{body}\n"  \
  "  </body>\n"    \
  "</html>"
end

扫码关注云+社区

领取腾讯云代金券