리터럴
이 문서에서는 F#에서 리터럴의 형식을 지정하는 방법을 보여 주는 테이블을 제공합니다.
리터럴 형식
다음 표에서는 F#의 리터럴 형식을 보여줍니다. 16진수 표기법의 숫자를 나타내는 문자는 대/소문자를 구분하지 않습니다. 형식을 식별하는 문자는 대/소문자를 구분합니다.
Type | 설명 | 접미사 또는 접두사 | 예제 |
---|---|---|---|
sbyte | 부호 있는 8비트 정수 | y | 86y 0b00000101y |
바이트 | 부호 없는 8비트 자연수 | uy | 86uy 0b00000101uy |
int16 | 부호 있는 16비트 정수 | s | 86s |
uint16 | 부호 없는 16비트 자연수 | us | 86us |
int int32 |
부호 있는 32비트 정수 | l 또는 none | 86 86l |
uint uint32 |
부호 없는 32비트 자연수 | u 또는 ul | 86u 86ul |
nativeint | 부호 있는 자연수에 대한 네이티브 포인터 | n | 123n |
unativeint | 부호 없는 자연수에 대한 네이티브 포인터 | un | 0x00002D3Fun |
int64 | 부호 있는 64비트 정수 | L | 86L |
uint64 | 부호 없는 64비트 자연수 | UL | 86UL |
single, float32 | 32비트 부동 소수점 숫자 | F 또는 f | 4.14F , 4.14f , infinityf 또는 -infinityf |
lf | 0x00000000lf |
||
float; double | 64비트 부동 소수점 숫자 | 없음 | 4.14 또는 2.3E+32 또는 2.3e+32 또는 infinity 또는 -infinity |
LF | 0x0000000000000000LF |
||
bigint | 64비트 표현에 국한되지 않는 정수 | I | 9999999999999999999999999999I |
decimal | 소수점 또는 유리수로 표시되는 분수 | M 또는 m | 0.7833M 또는 0.7833m |
Char | 유니코드 문자 | 없음 | 'a' 또는 '\u0061' |
문자열 | 유니코드 문자열 | 없음 | "text\n" 또는 @"c:\filename" 또는 """<book title="Paradise Lost">""" 또는 "string1" + "string2" 문자열도 참조하세요. |
바이트 | ASCII 문자 | B | 'a'B |
byte[] | ASCII 문자열 | B | "text"B |
문자열 또는 바이트[] | 축자 문자열 | @ 접두사 | @"\\server\share" (유니코드)@"\\server\share"B (ASCII) |
명명된 리터럴
상수로 사용할 값은 리터럴 특성으로 표시할 수 있습니다.
이 특성은 값이 상수로 컴파일되도록 하는 효과가 있습니다. 다음 예제에서는 아래 x
및 y
모두 변경할 수 없는 값이지만 x
런타임에 계산되는 반면 y
컴파일 시간 상수입니다.
let x = "a" + "b" // evaluated at run-time
[<Literal>]
let y = "a" + "b" // evaluated at compile-time
예를 들어 외부 함수를 호출할 때 DllImport
은(는) 컴파일 중에 myDLL
의 값을 알아야 하는 특성이므로 이 구분이 중요합니다. [<Literal>]
선언이 없으면 이 코드가 컴파일되지 않습니다.
[<Literal>]
let myDLL = "foo.dll"
[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()
패턴 일치 식에서 소문자로 시작하는 식별자는 항상 리터럴이 아닌 바인딩할 변수로 처리되므로 일반적으로 리터럴을 정의할 때 초기 대문자를 사용해야 합니다.
[<Literal>]
let SomeJson = """{"numbers":[1,2,3,4,5]}"""
[<Literal>]
let Literal1 = "a" + "b"
[<Literal>]
let FileLocation = __SOURCE_DIRECTORY__ + "/" + __SOURCE_FILE__
[<Literal>]
let Literal2 = 1 ||| 64
[<Literal>]
let Literal3 = System.IO.FileAccess.Read ||| System.IO.FileAccess.Write
설명
명명된 리터럴은 다음과 같은 경우에 유용합니다.
when
절 없이 패턴이 일치합니다.- 특성 인수입니다.
- 정적 형식 공급자 인수입니다.
유니코드 문자열에는 \u
뒤에 16비트 16진수 코드(0000 - FFFF)를 사용하여 지정할 수 있는 명시적 인코딩 또는 \U
뒤에 모든 유니코드 코드 포인트를 나타내는 32비트 16진수 코드(00000000 - 0010FFFF)를 사용하여 지정할 수 있는 UTF-32 인코딩이 포함될 수 있습니다.
|||
이외의 비트 연산자는 사용할 수 없습니다.
다른 베이스의 정수
부호 있는 32비트 정수는 각각 0x
, 0o
또는 0b
접두사를 사용하여 16진수, 8진수 또는 이진으로 지정할 수도 있습니다.
let numbers = (0x9F, 0o77, 0b1010)
// Result: numbers : int * int * int = (159, 63, 10)
숫자 리터럴의 밑줄
숫자를 밑줄 문자(_
)로 구분할 수 있습니다.
let value = 0xDEAD_BEEF
let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111
let exampleSSN = 123_45_6789
특수 부동 소수점 무한대 값
float
및 single
부동 소수점 숫자 형식에는 양수 및 음수 무한대를 나타내는 특수 값이 연결되어 있습니다.
F# 값 | F# 형식 | 해당 .NET 값 |
---|---|---|
infinity 또는 +infinity |
float |
PositiveInfinity |
-infinity |
float |
NegativeInfinity |
infinityf 또는 +infinityf |
single |
PositiveInfinity |
-infinityf |
single |
NegativeInfinity |
이러한 값은 직접 사용하거나 부동 소수점 0으로 나누거나 주어진 유형으로 표현하기에는 너무 작은 숫자로 나눌 때 반환될 수 있습니다. 예시:
> 1.0/0.0;;
val it: float = infinity
> 1.0/(-0.0);;
val it: float = -infinity
> 1.0/0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
;;
val it: float = infinity
.NET