Share via


Ara değerli dizeler

İlişkili dizeler, F# ifadelerini bunlara eklemenizi sağlayan dizelerdir. Bunlar, bir dizenin değerinin bir değer veya ifadenin sonucuna göre değişebileceği çok çeşitli senaryolarda yararlıdır.

Sözdizimi

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

Açıklamalar

İlişkili dizeler, bir dize değişmez değeri içinde "delikler" içinde kod yazmanıza olanak sağlar. Basit bir örnek verelim:

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

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

Her {} küme ayracı çifti arasındaki içerik herhangi bir F# ifadesi olabilir.

Bir {} küme ayracı çiftinden kaçmak için, bunlardan ikisini şöyle yazın:

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

Yazılan ilişkilendirilmiş dizeler

İlişkili dizeler, tür güvenliğini zorlamak için F# biçim tanımlayıcılarına da sahip olabilir.

let name = "Phillip"
let age = 30

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

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

Önceki örnekte kod, değeri yanlışlıkla olması gereken yere name (veya tersi) geçirirage. İlişkili dizeler biçim tanımlayıcıları kullandığından, bu küçük bir çalışma zamanı hatası yerine bir derleme hatasıdır.

İlişkili dizeleri ayrıntılı olarak ifade edin

F# üç tırnak işaretiyle düz ilişkilendirilmiş dizeleri destekler, böylece dize değişmez değerlerini ekleyebilirsiniz.

let age = 30

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

Biçim tanımlayıcıları

Biçim tanımlayıcıları printf stilinde veya olabilir. NET stili. Printf stili tanımlayıcılar, ayraçların önüne yerleştirilmiş düz metin biçimlendirmesiyle kapsananlardır. Örneğin:

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

Biçim belirtici %A , yapılandırılmış F# verilerinin tanılama çıktısını üretmek için özellikle yararlıdır.

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

. NET stili tanımlayıcılar, küme ayraçlarının içinde bir'in : arkasına yerleştirilen ile String.Formatkullanılabilir olanlardır. Örneğin:

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

Bir ise. NET stili tanımlayıcı sıra dışı bir karakter içerdiğinden, çift backticks kullanılarak kaçılabilir:

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

İlişkili dizelerdeki ifadeleri hizalama

İlişkili dizelerin | içinde ifadeleri sola hizalayabilir veya sağa hizalayabilir ve kaç boşluk olduğunu belirtimleyebilirsiniz. Aşağıdaki ilişkilendirilmiş dize, sol ve sağ ifadeleri sırasıyla yedi boşlukla sola ve sağa hizalar.

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

İlişkili dizeler ve FormattableString biçimlendirme

Ayrıca, için kurallara FormattableStringuygun biçimlendirme uygulayabilirsiniz:

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

Ayrıca, ilişkilendirilmiş bir dize de tür ek açıklaması aracılığıyla bir tür olarak FormattableString denetlenebilir:

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

Tür ek açıklamasının, ilişkilendirilmiş dize ifadesinin kendisinde olması gerektiğini unutmayın. F# örtük olarak ilişkilendirilmiş bir dizeyi içine FormattableStringdönüştürmez.

Dize ilişkilendirme için genişletilmiş söz dizimi

F# 8'den başlayarak, birden çok {veya }% karakter içeren metinlerle çalışırken, kaçış gereksinimini ortadan kaldırmak için genişletilmiş dize ilişkilendirme söz dizimini kullanabilirsiniz.

Üç tırnak dizesi değişmez değerleri birden çok $ karakterle başlayabilir ve bu da ilişkilendirmeyi açmak ve kapatmak için gereken ayraç sayısını değiştirir. Bu dize değişmez değerlerinde { ve } karakterlerin kaçılması gerekmez:

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

Biçim tanımlayıcıları için gereken karakter sayısı % aynı şekilde etkilenir:

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

Ayrıca bkz.