多行字符串格式

时间:2012-04-11 20:00:24

标签: ruby

尝试在Ruby中格式化mutliline字符串

heredoc%q{ }存在的问题是它们包含用于格式化代码的空格。

s = %q{Foo
         Bar
         Baz}
puts s

错误地输出以下内容:

Foo
          Bar
          Baz   

以下作品,但\字符有点难看。

s = "Foo\n" \
    "  Bar\n" \
    "  Baz"
puts s

以下适用于python:

s = ("Foo\n"
     "  Bar\n"
     "  Baz")
print s

Ruby中是否有等价物?

3 个答案:

答案 0 :(得分:3)

建造得很好但更多的是危险而不是我想的

s = %w{ Foo
        Bar
        Baz}

puts s

=> 
Foo
Bar
Baz

如果你想保留第一行的缩进,这个肯定是按设计建造的

s   = <<-END
        Foo
          Bar
          Baz
      END
puts s

=>
        Foo
          Bar
          Baz

答案 1 :(得分:2)

您可以随时执行以下操作:

s = ["Foo",
     "  Bar",
     "  Baz"].join("\n")
puts s
=>
Foo
  Bar
  Baz

这样,您可以使用引号来明确划分字符串的开头和结尾,并且缩进的空格不会与字符串混淆。

答案 2 :(得分:2)

我从The Ruby Way偷走了一个技巧:

class String
  def heredoc(prefix='|')
    gsub /^\s*#{Regexp.quote(prefix)}/m, ''
  end
end

s = <<-END.heredoc
    |Foo
    |  Bar
    |  Baz
    END