ヒアドキュメント
Racketでは、「ヒア文字列」として、#<<の後に終端の識別子を続ける形の書式が存在する。文字列の中身には、#<<直後の行から終端の識別子だけの行の手前まで、全てのものが含まれる(終端の識別子の直前にある改行は文字列の一部とはならない)。
出力は以下のようになる。
ヒア文字列の中でエスケープシーケンスは処理されず、何を書いても文字通りに認識される。
上の例を実行すると、以下のように出力される。
通常の文字列が使えるところなら、たいていヒア文字列を使うことができる。
出力は以下のようになる。
at-exp拡張を使うことで、@記法を使えるようになる。 具体的には、以下のように書ける。
出力は以下のようになる。
@記法は文字列限定の機能ではなく、他の場面でも使うことができる。
Tclには、通常の文字列中に改行を入れることができるため、「ヒアドキュメント」としての特別な文法構造は存在しない。中括弧で区切った場合、変数置換は行われない。
二重引用符で区切った場合、変数置換が実行時に行われる。
中括弧区切りの場合、エスケープしない中括弧については左右のバランスがとれている必要がある。二重引用符区切りの場合は中括弧のバランスは無関係となるが、バックスラッシュ・ドル記号・角カッコにはそれぞれに特別な機能が存在する。また、エスケープされていない二重引用符が現れたところで文字列が終了する。
なお、上の2つの例では、いずれも(書いてあるとおりに)文字列の最初と最後の文字が改行文字となる。もしもこれが邪魔なら、string trimで取り除くことができる。
同様に、string mapをインデントの解除や中括弧のエスケープなど、書き方を工夫する上で使うことができる。