2016-07-21 11 views
1

私は別のものに1つの複数行の文字列を補間しようとしているとき、私は間違ってインデントを取得する部分文字列の最初の行のみが例えば、右インデントを持っているので:補間の複数行の文字列

substring = <<-STRING.strip_heredoc 
    first line 
    second line 
STRING 

string = <<-STRING.strip_heredoc 
    Quote 
    #{ substring } 
    from substring 
STRING 

結果は次のようになります:

Quote 
    first line 
second line 

    from substring 

所望つ

Quote 
    first line 
    second line 
from substring 

マイquestioであるのに対しnはthis question about perl and xml、またはthis one about erbとほとんど同じですが、もう少し一般的です。同様に補間がどのSGML(XML、HTMLまたはERB)だけでなく、を生成するために有用である可能性があるという事実を考慮するが、SQLおよび他の言語のための

...

はどのような方法、方法または一般的な方法があります正しいインデントで複数行の文字列を補間するには?

方法がない場合には、は、どのようなツールを使用すると、後処理の異なる言語のために推薦する(例えばHTML、SQL)


更新:

アナログである

のRuby 2.3の機能<<~strip_heredocの文字列は、サブ文字列の最初の行にのみインデントを追加します。

答えて

1

私は目を覚ましてこの問題を見て、それを解決する朝のプログラミングのパズル。それは私が思ったよりも難しかった。私はAPIや複雑さに驚いていませんが、もう時間を費やしたくはなく、うまくいきます。多分あなたはそれが役に立つと思うでしょう。もしそうでなければ、おそらくそれは少なくともいくつかの代替的なアプローチを促すでしょう。

Ruby Here Documentsを使用して、あなたのニーズを満たすライブラリやフレームワークを知りません。 Ruby 2.3 has a new featureこれは基本的にRailsの#strip_heredocの機能ですが、私はそれを使用していないので、マルチライン補間の処理方法はわかりません。ここでは(ルビー2.0を使用して)あなたのユースケースに基づいて、私のカスタムソリューションのためのRubyのコードは次のとおりです。

https://gist.github.com/shock/1d269a91f938bf1a1c3cba3856bedf19

+0

はい、おかげで、私は、Ruby 2.3の特徴を認識しています。それに応じて質問が更新されました。あなたの解決策をチェックします。 –

+0

うまくやって、主演。私は何とかそれを改善することがあります –

+0

私はあなたの答えを編集し、あなたのソリューションはRubyで書かれていることを追加することをお勧めします。私の質問はRubyも使用していますが、他の言語の使用を考えている他の答えがあるかもしれません。 –