다음을 통해 공유


참조 셀

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

문법

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 }

다음 표에서는 참조 셀에서 사용할 수 있는 기능을 보여줍니다.

연산자, 멤버 또는 필드 설명 유형 정의
ref (연산자) 값을 새 참조 셀에 캡슐화합니다. 'a -> 'a ref let ref x = { contents = x }
Value (속성) 기본 값을 가져오거나 설정합니다. unit -> 'a member x.Value = x.contents

C# 프로그래머는 C#에서 F#과 동일하지 않다는 것을 ref 알아야 ref 합니다. F#의 해당 구문은 참조 셀과 다른 개념인 바이레프입니다.

로 표시된 값은 클로저에 'a ref 의해 캡처되는 경우 자동으로 승격될 수 있습니다. 값을 참조하세요.mutable

사용되지 않는 구문

F# 6.0부터 다음 연산자는 더 이상 사용되지 않으며 해당 연산자는 정보 경고를 제공합니다.

연산자, 멤버 또는 필드 설명 유형 정의
! (역참조 연산자, 사용되지 않음) 기본 값을 반환합니다. '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 . 자세한 내용은 컴파일러 옵션참조하세요.

참고하십시오