다음을 통해 공유


참조 셀

참조 셀 은 참조 의미 체계를 사용하여 변경 가능한 값을 만들 수 있는 스토리지 위치입니다.

구문

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 refRef<'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 컴파일러 옵션을 사용해야 합니다. 자세한 내용은 컴파일러 옵션을 참조하세요.

참고 항목