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 に答える