보간된 문자열

보간된 문자열은 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# 식일 수 있습니다.

중괄호 쌍을 이스케이프 {} 하려면 다음과 같이 두 쌍을 작성합니다.

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

이전 예제에서 코드는 위치 값을 잘못 전달 agename 하고 그 반대의 경우도 마찬가지입니다. 보간된 문자열은 형식 지정자를 사용하므로 미묘한 런타임 버그 대신 컴파일 오류입니다.

보간된 축자 문자열

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``}" // e.g. "20220210"

이면 . NET 스타일 지정자는 비정상적인 문자를 포함하고 이중 백틱을 사용하여 이스케이프할 수 있습니다.

let nowDashes = $"{System.DateTime.UtcNow:``yyyy-MM-dd``}" // e.g. "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"

참고 항목