Interpolált sztringek

Az interpolált sztringek olyan sztringek , amelyek lehetővé teszik F#-kifejezések beágyazását ezekbe. Számos olyan forgatókönyvben hasznosak, ahol egy sztring értéke egy érték vagy kifejezés eredménye alapján változhat.

Syntax

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

Megjegyzések

Az interpolált sztringek lehetővé teszik a kód írását egy sztringkonstanson belüli "lyukakba". Íme egy egyszerű példa:

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

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

Az egyes {} zárójelpárok közötti tartalom bármilyen F#-kifejezés lehet.

Ha meg szeretne szabadulni egy {} kapcsos zárójelpártól, írjon közülük kettőt a következőképpen:

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

Beírt interpolált sztringek

Az interpolált sztringek F#-formátumkijelölőkkel is rendelkezhetnek a típusbiztonság kikényszerítéséhez.

let name = "Phillip"
let age = 30

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

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

Az előző példában a kód tévesen adja át azt az age értéket, ahol name lennie kell, és fordítva. Mivel az interpolált sztringek formátumjelölőket használnak, ez fordítási hiba, nem pedig finom futásidejű hiba.

Szó szerinti interpolált sztringek

Az F# támogatja a szó szerinti interpolált sztringeket tripla idézőjelekkel, így sztringkonstansokat ágyazhat be.

let age = 30

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

Formázási definiálók

A formátumjelölők lehetnek printf stílusúak vagy . NET-stílus. A printf-style kijelölők a kapcsos zárójelek elé helyezett egyszerű szöveges formázással lefedett elemek. Példa:

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

A formátumkijelölő %A különösen hasznos strukturált F#-adatok diagnosztikai kimenetének előállításához.

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

. A NET-stílusú megadók azok, amelyek a String.Formatzárójelek közé : kerülnek. Példa:

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

Ha a . A NET-stílusjelölő szokatlan karaktert tartalmaz, majd kettős háttetűkkel szöktethető meg:

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

Kifejezések igazítása interpolált sztringekben

Az interpolált sztringeken | belüli kifejezéseket balra igazíthatja vagy jobbra igazíthatja, és megadhatja, hogy hány szóköz legyen. Az alábbi interpolált sztring hét szóközzel igazítja a bal és a jobb oldali kifejezéseket balra és jobbra.

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

Interpolált sztringek és FormattableString formázás

Olyan formázást is alkalmazhat, amely betartja a következőhöz tartozó szabályokat 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."

Emellett egy interpolált sztring típusjegyzetként FormattableString is ellenőrizhető:

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

Vegye figyelembe, hogy a típusjegyzetnek magának az interpolált sztringkifejezésnek kell lennie. Az F# nem konvertál implicit módon egy interpolált sztringet FormattableString.

A sztring interpolációjának bővített szintaxisa

Az F# 8-tól kezdve, ha több {, } vagy % már karaktert tartalmazó szöveggel dolgozik, kiterjesztett sztring interpolációs szintaxissal eltávolíthatja a menekülés szükségességét.

A három idézőjeles sztringkonstansok több $ karakterből állhatnak, ami megváltoztatja, hogy hány kapcsos zárójel szükséges az interpoláció megnyitásához és bezárásához. Ezekben a sztringkonstansokban { a } karaktereket nem kell feloldani:

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."""

A formátumjelölőkhöz szükséges karakterek száma % ugyanúgy változik:

let percent = $$"""50% of 20 is %%.1f{{20m * 0.5m}}"""
// "50% of 20 is 10.0"

Lásd még