2

ある複数行の文字列を別の文字列に補間しようとすると、部分文字列の最初の行だけが正しいインデントを持っているため、間違ったインデントが発生します。

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 

私の質問は、 perl と xml に関するこの質問、またはerb に関するこの質問とほぼ同じですが、もう少し一般的です。

SGML (XML、HTML、または ERB) だけでなく、SQL やその他の言語の生成にも補間が役立つ可能性があるという事実を考慮すると...

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

方法がない場合、さまざまな言語(HTML、SQL など)の後処理にどのツールをお勧めしますか?


アップデート:

Ruby 2.3 の機能<<~は still (そして明らかに) に類似しstrip_heredocており、部分文字列の最初の行にのみインデントを追加します

4

1 に答える 1

1

私は目を覚まし、この質問を見て、それを朝のプログラミング パズルにして解決することにしました。思ったより大変でした。私は API や複雑さに興奮していませんが、これ以上時間をかけたくありませんでした。多分あなたはそれが役に立つと思うでしょう。そうでない場合は、少なくとも他の代替アプローチを刺激する可能性があります。

プレーンな Ruby Here Documents を使用してニーズを満たすライブラリやフレームワークを知りません。Ruby 2.3 には、基本的に Rails が行うことを行う新しい機能#strip_heredocがありますが、私はそれを使用したことがなく、複数行の補間をどのように処理するのかわかりません。あなたのユースケースに基づいたカスタムソリューションのRubyコードは次のとおりです(Ruby 2.0を使用):

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

于 2016-07-21T15:22:33.117 に答える