英語版
このページの英語版を見る
core.interpolation
このモジュールはDの
文字列補間と呼ばれることもある。
文字列補間と呼ばれることもある。
string str; int num; // コンパイラはこのモジュールを使って、 // ここで使われているi"..."リテラルを実装する。 auto a = i"$(str) has $(num) items.";変数a は一連の式である:
a[0] == InterpolationHeader() a[$-1] == InterpolationFooter()最初と最後に、ヘッダーとフッターが表示される。 補間がどこで始まり、どこで終わるかを明確に示す。 補間シーケンスが入れ子になっていることもある、 それぞれにヘッダーとフッターがある。それらを を、内容を囲むバランスの取れた括弧のセットとして考えてほしい。 その中には、次の3つのカテゴリーがある。 InterpolatedLiteral!"string" 、文字列 InterpolatedExpression!"code" 。 式、そして値そのものである。 独自の型である。 例では、以下のようになる:
auto a = i"$(str) has $(num) items.";我々は見つけるだろう:
a[0] == InterpolationHeader() a[1] == InterpolatedExpression!"str" a[2] == str a[3] == InterpolatedLiteral!" has "; a[4] == InterpolatedExpression!"num"; a[5] == num a[6] == InterpolatedLiteral!" items."; a[7] == InterpolationFooter() a.length == 8;元の入力との対応を見ることができる。 $(expression) と書くと、式の文字列は として渡される。 の文字列がInterpolatedExpression!ThatString として渡される、 (として渡される(式を囲む括弧は除く)、 として渡され、それ以外はすべてInterpolatedLiteral!str として渡される、 として渡される。 InterpolatedExpression!... の後に、タプル内の実際の値が表示される。 の後に、タプルの実際の値が表示される。(式が複数の値に展開された場合、例えば、式自体がタプルであった場合、タプル内の実際の値が表示される。 (式が複数の値に展開された場合、例えば、式自体がタプルであった場合、1つの式に対して複数の値が存在することになる)、 一つの式に対して複数の値が存在することになる)。 ライブラリ関数はコードをミックスインしようとしてはならない。 InterpolatedExpression をmixinしようとしてはならない。そうすると のコードをミックスしようとすると失敗する。 この文字列は、情報提供のみを目的としている。 この文字列は、情報提供のためと、ユーザーが書いたものを分離するためのセンチネルとしてのみ提供される。 あなたのコードは、空のコード文字列 InterpolatedExpression を扱えるようにしなければならない。 InterpolatedExpression 実装が も扱えるようにしなければならない。 これらのtoString メンバは、null を返す。 InterpolatedLiteral はリテラル文字列を返す。 のような汎用関数による処理を容易にするためである。 std.stdio.write やstd.conv.text のような汎用関数による処理を容易にするためである。 透過的にスキップされる。 InterpolatedLiteral から文字列を取り出すには、 式または メソッドを使うことができる。 から文字列を抽出するには、is 式または.toString メソッドを使用する。 InterpolatedExpression から文字列を抽出するには、 式または メンバを使用できる。 is 式または.expression メンバを使用する。 これらの構造体はいずれも実行時状態を持たない。
History:
2023年後半にリリースされたdmd 2.10xフロントエンドで追加された。
- pure nothrow @nogc @safe string
__getEmptyString
(); - 空文字列を返すための共通実装。 以下のテンプレート化された関数" に基づいて、同じ関数の複数のバージョンを保存することを避けるためである。
- struct
InterpolationHeader
;
structInterpolationFooter
; - 補間された式列の開始と終了を示すセンチネル値。 補間された式列の始点と終点を示すセンチネル値。これらは入れ子にできることに注意、 もしその知識がアプリケーションにとって重要であれば、入れ子の数を記録しておくと役に立つだろう。 もしその知識がアプリケーションにとって重要であれば、ネストカウントを保持しておくと便利である。
- alias
toString
= .__getEmptyString; - 既存の関数との互換性を保つために、null を返す。 std.stdio.writeln やstd.conv.text のような既存の関数との互換性を保つために、 を返す。
- struct
InterpolatedLiteral
(string text); - 式の間にある文字列リテラルの断片を表す。 補間式シーケンスの一部として渡される。
- static pure nothrow @nogc @safe string
toString
(); - タプルのこのセグメントについて、補間された文字列リテラルのテキストを返す。 タプルのこのセグメントに対して補間された文字列リテラルのテキストを返す。 std.stdio.writeln やstd.conv.text のような既存の関数と互換性がある。
- struct
InterpolatedExpression
(string text); - 補間式列の一部として渡された式のソースコードを表す。 補間式シーケンスの一部として渡された式のソースコードを表す。
- enum auto
expression
; - 元のリテラルで使用された補間式のテキストを返す。 元のリテラルで使用された補間式のテキストを返す。
- alias
toString
= __getEmptyString; - 既存の関数との互換性を保つため、null を返す。 std.stdio.writeln やstd.conv.text のような既存の関数との互換性を保つために、 を返す。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku