나는 gradbot이 말한 것만 지원할 수 있습니다. 뮤 테이션이 필요할 때는 let mutable.
구현 및 두 ref셀 간의 차이점과 관련하여 기본적으로 변경 가능한 레코드 필드를 포함하는 매우 간단한 레코드로 구현됩니다. 직접 쉽게 작성할 수 있습니다.
type ref<'T> = // '
{ mutable value : 'T } // '
// the ref function, ! and := operators look like this:
let (!) (a:ref<_>) = a.value
let (:=) (a:ref<_>) v = a.value <- v
let ref v = { value = v }
두 접근 방식의 눈에 띄는 차이점 let mutable은 변경 가능한 값을 스택에 ref저장하는 반면 (C #에서는 변경 가능한 변수로) 변경 가능한 값을 힙 할당 레코드의 필드에 저장한다는 것입니다. 이것은 성능에 약간의 영향을 미칠 수 있지만 숫자가 없습니다 ...
덕분에 사용하는 변경 가능한 값을 ref별칭으로 지정할 수 있습니다. 즉, 동일한 변경 가능한 값을 참조하는 두 개의 값을 만들 수 있습니다.
let a = ref 5 // allocates a new record on the heap
let b = a // b references the same record
b := 10 // modifies the value of 'a' as well!
let mutable a = 5 // mutable value on the stack
let mutable b = a // new mutable value initialized to current value of 'a'
b <- 10 // modifies the value of 'b' only!