Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ссылочные ячейки — это расположения хранилища, позволяющие создавать изменяемые значения с семантикой ссылок.
Синтаксис
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>. Компилятор и 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# не то же самое, что refref и в F#. Эквивалентные конструкции в F# являются байтами, которые являются разными понятиями от ссылочных ячеек.
Значения, помеченные как mutable могут быть автоматически повышены до 'a ref значения при захвате при закрытии; см. раздел "Значения".
Устаревшие конструкции
Так как F# 6.0, следующие операторы не рекомендуется использовать, а их использование дает информационные предупреждения:
| Оператор, член или поле | Описание | Тип | Определение |
|---|---|---|---|
! (оператор dereference, устаревший) |
Возвращает базовое значение. | '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 предоставляется для совместимости с другими версиями машинного обучения и выдает предупреждение во время компиляции. Чтобы отключить предупреждение, используйте параметр компилятора --mlcompatibility . Дополнительные сведения см. в параметрах компилятора .
См. также
- Справочник по языку F#
- Параметры и аргументы
- Справочник по символам и операторам
- Значения
- F# RFC FS-1111