挿入文字列は、F# 式を埋め込むことができる 文字列 です。 これらは、値または式の結果に基づいて文字列の値が変更される可能性があるさまざまなシナリオで役立ちます。
構文
$"string-text {expr}"
$"string-text %format-specifier{expr}"
$"""string-text {"embedded string literal"}"""
$$"""string-text %%format-specifier{{expr}}"""
注釈
挿入文字列を使用すると、文字列リテラル内の "穴" にコードを記述できます。 基本的な例を次に示します。
let name = "Phillip"
let age = 30
printfn $"Name: {name}, Age: {age}"
printfn $"I think {3.0 + 0.14} is close to {System.Math.PI}!"
各 {}
中かっこペアの間の内容には、任意の F# 式を指定できます。
{}
中かっこペアをエスケープするには、次のように 2 つを記述します。
let str = $"A pair of braces: {{}}"
// "A pair of braces: {}"
型指定された挿入文字列
挿入文字列には、型の安全性を強制する F# 書式指定子を含めることもできます。
let name = "Phillip"
let age = 30
printfn $"Name: %s{name}, Age: %d{age}"
// Error: type mismatch
printfn $"Name: %s{age}, Age: %d{name}"
前の例では、コードは誤ってname
する必要があるage
値を渡します。その逆も同様です。 挿入文字列では書式指定子が使用されるため、これは実行時の微妙なバグではなくコンパイル エラーです。
逐語的な補間文字列
F# では、文字列リテラルを埋め込むことができるように、三重引用符で囲まれた逐語的な補間文字列がサポートされています。
let age = 30
printfn $"""Name: {"Phillip"}, Age: %d{age}"""
書式指定子
書式指定子は、printf スタイルまたは .NET スタイル。 Printf スタイルの指定子は、中かっこの前に配置された プレーンテキストの書式設定でカバーされる指定子です。 例えば次が挙げられます。
let pi = $"%0.3f{System.Math.PI}" // "3.142"
let code = $"0x%08x{43962}" // "0x0000abba"
書式指定子 %A
は、構造化 F# データの診断出力を生成する場合に特に便利です。
let data = [0..4]
let output = $"The data is %A{data}" // "The data is [0; 1; 2; 3; 4]"
.NET スタイルの指定子は、中かっこ内の:
の後に配置される、String.Formatで使用できる指定子です。 例えば次が挙げられます。
let pi = $"{System.Math.PI:N4}" // "3.1416"
let now = $"{System.DateTime.UtcNow:``yyyyMMdd``}" // for example, "20220210"
If a .NET スタイル指定子には通常とは異なる文字が含まれています。その後、二重バックティックを使用してエスケープできます。
let nowDashes = $"{System.DateTime.UtcNow:``yyyy-MM-dd``}" // for example, "2022-02-10"
挿入文字列での式の配置
挿入文字列内の式は、 |
とスペースの数の指定を使用して左揃えまたは右揃えにできます。 次の補間文字列は、左右の式をそれぞれ 7 つのスペースで左右に配置します。
printfn $"""|{"Left",-7}|{"Right",7}|"""
// |Left | Right|
挿入文字列と FormattableString
書式設定
また、 FormattableStringの規則に従った書式を適用することもできます。
let speedOfLight = 299792.458
printfn $"The speed of light is {speedOfLight:N3} km/s."
// "The speed of light is 299,792.458 km/s."
さらに、挿入文字列は、型注釈を使用して FormattableString として型チェックすることもできます。
let frmtStr = $"The speed of light is {speedOfLight:N3} km/s." : FormattableString
// Type: FormattableString
// The speed of light is 299,792.458 km/s.
型注釈は、挿入文字列式自体に存在する必要があることに注意してください。 F# では、補間された文字列は暗黙的に FormattableStringに変換されません。
文字列補間の拡張構文
F# 8 以降では、既に複数の {
、 }
、または %
文字を含むテキストを操作する場合は、拡張文字列補間構文を使用してエスケープの必要性を排除できます。
三重引用符文字列リテラルは、複数の $
文字で始まり、補間を開いたり閉じたりするために必要な中かっこの数を変更できます。
これらの文字列リテラルでは、 {
文字と }
文字をエスケープする必要はありません。
let str = $$"""A string containing some {curly braces} and an {{"F#" + " " + "expression"}}."""
// "A string containing some {curly braces} and an F# expression."
let another = $$$"""A string with pairs of {{ and }} characters and {{{ "an F# expression" }}}."""
// "A string with pairs of {{ and }} characters and an F# expression."""
書式指定子に必要な %
文字の数も、同じように影響を受けます。
let percent = $$"""50% of 20 is %%.1f{{20m * 0.5m}}"""
// "50% of 20 is 10.0"
こちらも参照ください
.NET