3

尝试在 Ruby 中格式化多行字符串

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中是否有等价物?

4

3 回答 3

3

建造得很好,但比我想的要危险得多

s = %w{ Foo
        Bar
        Baz}

puts s

=> 
Foo
Bar
Baz

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

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

=>
        Foo
          Bar
          Baz
于 2012-04-11T20:32:40.617 回答
2

你总是可以做这样的事情:

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

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

于 2012-04-11T21:13:19.107 回答
2

我从The Ruby Way偷来的一个技巧:

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

s = <<-END.heredoc
    |Foo
    |  Bar
    |  Baz
    END
于 2012-04-12T04:25:40.620 回答