Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ссылочные ячейки — это расположения хранилища, позволяющие создавать изменяемые значения с семантикой ссылок.
Синтаксис
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# не то же самое, что ref
ref
и в 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