Interpolované řetězce

Interpolované řetězce jsou řetězce , které umožňují vložit výrazy jazyka F#do nich. Jsou užitečné v široké škále scénářů, kdy se hodnota řetězce může změnit na základě výsledku hodnoty nebo výrazu.

Syntax

$"string-text {expr}"
$"string-text %format-specifier{expr}"
$"""string-text {"embedded string literal"}"""

Poznámky

Interpolované řetězce umožňují psát kód do "děr" uvnitř řetězcového literálu. Tady je jednoduchý příklad:

let name = "Phillip"
let age = 30
printfn $"Name: {name}, Age: {age}"

printfn $"I think {3.0 + 0.14} is close to {System.Math.PI}!"

Obsah mezi jednotlivými {} dvojicemi závorek může být libovolný výraz jazyka F#.

Pokud chcete utéct {} pár závorek, napište dva z nich takto:

let str = $"A pair of braces: {{}}"
// "A pair of braces: {}"

Zapisované interpolované řetězce

Interpolované řetězce můžou mít také specifikátory formátu F#, které vynucují bezpečnost typů.

let name = "Phillip"
let age = 30

printfn $"Name: %s{name}, Age: %d{age}"

// Error: type mismatch
printfn $"Name: %s{age}, Age: %d{name}"

V předchozím příkladu kód omylem předá age hodnotu, kde name by měla být, a naopak. Protože interpolované řetězce používají specifikátory formátu, jedná se o chybu kompilace místo drobné chyby za běhu.

Doslovné interpolované řetězce

F# podporuje doslovné interpolované řetězce s trojitými uvozovkami, abyste mohli vkládat řetězcové literály.

let age = 30

printfn $"""Name: {"Phillip"}, Age: %d{age}"""

Specifikátory formátu

Specifikátory formátu mohou být buď printf-style, nebo . Styl NET. Specifikátory stylu printf jsou ty, které jsou pokryté formátováním prostého textu, umístěné před složenými závorkami. Například:

let pi = $"%0.3f{System.Math.PI}"  // "3.142"
let code = $"0x%08x{43962}"  // "0x0000abba"

Specifikátor %A formátu je zvláště užitečný pro vytváření diagnostického výstupu strukturovaných dat jazyka F#.

let data = [0..4]
let output = $"The data is %A{data}"  // "The data is [0; 1; 2; 3; 4]"

. Specifikátory stylu NET jsou ty, které lze použít s String.Format, umístěné za složenými : závorkami. Například:

let pi = $"{System.Math.PI:N4}"  // "3.1416"
let now = $"{System.DateTime.UtcNow:``yyyyMMdd``}" // e.g. "20220210"

Pokud zarovnání .NET obsahuje neobvyklý znak, můžete ho uvozovat pomocí dvojitých zpětných znamétek:

let nowDashes = $"{System.DateTime.UtcNow:``yyyy-MM-dd``}" // e.g. "2022-02-10"

Zarovnání výrazů v interpolovaných řetězcích

Výrazy v interpolovaných řetězcích | můžete zarovnat doleva nebo doprava a určit, kolik mezer. Následující interpolovaný řetězec zarovná výrazy zleva a doprava doleva a doprava o sedm mezer.

printfn $"""|{"Left",-7}|{"Right",7}|"""
// |Left   |  Right|

Interpolované řetězce a FormattableString formátování

Můžete také použít formátování, které dodržuje pravidla pro 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."

Kromě toho lze interpolovaný řetězec také zkontrolovat jako poznámku FormattableString typu:

let frmtStr = $"The speed of light is {speedOfLight:N3} km/s." : FormattableString
// Type: FormattableString
// The speed of light is 299,792.458 km/s.

Všimněte si, že poznámka typu musí být na interpolovaném řetězcovém výrazu samotné. F# implicitně nepřevádí interpolovaný řetězec na FormattableString.

Viz také