これは実際には 2 つの質問を組み合わせたものです。
まず、ヒアドキュメント内で数学を行う方法はありますか?
2番目:ヒアドキュメントでフォーマット文字列を使用する方法はありますか? この 2 番目の質問の例は次のとおりです。
print <<HERE
%s
HERE
% 'string'
それでもうまくいきません。
ありがとう
これは実際には 2 つの質問を組み合わせたものです。
まず、ヒアドキュメント内で数学を行う方法はありますか?
2番目:ヒアドキュメントでフォーマット文字列を使用する方法はありますか? この 2 番目の質問の例は次のとおりです。
print <<HERE
%s
HERE
% 'string'
それでもうまくいきません。
ありがとう
はい、両方に。デフォルトでは、ヒアドキュメントは で補間を行い#{}
ます。任意の Ruby コードをその中に入れて、評価することができます。(補間を避けるために、 を行うことができます<<'HERE'
。) 2 番目の部分では、構文が間違っています。やったほうがいい:
print <<HERE % 'string'
%s
HERE
最初の質問への回答です。はい、HERE doc で計算できます。標準の #{} 式の評価を使用するだけです。
<<EOF
This is a
multiline doc
with some math in it.
#{3 *18}
EOF
2 番目の質問への回答です。HERE ドキュメント内の例で示している方法で文字列補間を行うことはできません。評価の仕方を考えてみましょう。これは、ドキュメントが終了したときに即座に評価されるストリームのように扱われます。
通常、HERE ドキュメントの前に他の変数を作成し、HERE ドキュメント内で標準式の評価を使用します。
文字列を HERE doc で直接フォーマットする場合は、@sawa が指摘したように先頭に移動する必要があります。次の例で、複数の文字列を配列形式で渡していることに注目してください。
<<EOF % ['string','string2','string3']
%s
%s
%s
HERE