참조 셀
참조 셀 은 참조 의미 체계를 사용하여 변경 가능한 값을 만들 수 있는 스토리지 위치입니다.
구문
ref expression
설명
이 함수를 ref
사용하여 초기 값이 있는 새 참조 셀을 만듭니다. 이는 변경 가능한 변수이므로 참조 셀을 만든 다음 내부 값을 변경할 수 있습니다. 참조 셀은 단순한 주소가 아니라 실제 값을 저장하는 위치입니다.
다음 코드 예제에서는 참조 셀을 선언하고 사용하는 방법을 보여 줍니다.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
출력은 다음과 같습니다.
10
11
참조 셀은 다음과 같이 선언되는 Ref
제네릭 레코드 형식의 인스턴스입니다.
type Ref<'a> =
{ mutable contents: 'a }
형식 'a ref
는 Ref<'a>
와 같은 의미입니다. IDE의 컴파일러와 IntelliSense에서는 이 형식을 전자와 같이 표시하지만 그 내부 정의는 후자와 같습니다.
ref
연산자는 새 참조 셀을 만드는 데 사용됩니다. 다음 코드는 ref
연산자의 선언입니다.
let ref x = { contents = x }
다음 표에는 참조 셀에 사용할 수 있는 기능이 나와 있습니다.
연산자, 멤버 또는 필드 | 설명 | Type | 정의 |
---|---|---|---|
ref (연산자) |
값을 새 참조 셀로 캡슐화합니다. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (속성) |
내부 값을 가져오거나 설정합니다. | unit -> 'a |
member x.Value = x.contents |
C# 프로그래머는 C#에서 F#과 동일하지 않다는 것을 ref
알아야 ref
합니다. F#의 해당 구문은 참조 셀과 다른 개념인 바이레프입니다.
로 mutable
표시된 값은 클로저에 'a ref
의해 캡처되는 경우 자동으로 승격될 수 있습니다. 값을 참조 하세요.
사용되지 않는 구문
F# 6.0부터 다음 연산자는 더 이상 사용되지 않으며 해당 연산자는 정보 경고를 제공합니다.
연산자, 멤버 또는 필드 | 설명 | Type | 정의 |
---|---|---|---|
! (역참조 연산자, 사용되지 않음) |
내부 값을 반환합니다. | 'a ref -> 'a |
let (!) r = r.contents |
:= (대입 연산자, 사용되지 않음) |
내부 값을 변경합니다. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (레코드 필드) |
내부 값을 가져오거나 설정합니다. | 'a |
let ref x = { contents = x } |
대신 직접 사용하는 .Value
것이 좋습니다. F# RFC FS-1111을 참조하세요.
필드 contents
는 다른 ML 버전과의 호환성을 위해 제공되며 컴파일 과정에서 이 필드로 인해 경고가 발생합니다. 경고가 발생하지 않도록 하려면 --mlcompatibility
컴파일러 옵션을 사용해야 합니다. 자세한 내용은 컴파일러 옵션을 참조하세요.
참고 항목
.NET