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"