Ну, я понял, что F # может управлять ссылками (своего рода C ++ подобными ссылками). Однако вот что мне нужно знать:
Ключевое слово Ref: Ключевое слово ref
используется для создания из значения ссылки на это значение предполагаемого типа. Итак
let myref = ref 10
Это означает, что F # создаст объект типа Ref
, поместив туда (в изменяемое поле) my int 10
.
OK. Поэтому я предполагаю, что ref
используется для создания экземпляров типа Ref
. Это правильно?
Значение доступа: Чтобы получить доступ к значению, хранящемуся в ссылке, я могу сделать следующее:
let myref = ref 10
пусть myval = myref.Value
пусть myval2 =! myref
В то время как оператор : =
позволяет мне редактировать значение следующим образом:
let myref = ref 10
myref.Value
Итак !
(Bang) разыменовывает мою ссылку. И : =
отредактируйте его. Я полагаю, это тоже правильно.
Оператор &: Что делает этот оператор? Применяется ли это к ссылочному типу? Нет, я думаю, это должно быть применено к изменяемому значению, и что это возвращает? Ссылка? Адрес? При использовании интерактивного:
let mutable mutvar = 10 ;;
& a ;;
Последняя строка вызывает ошибку, поэтому я не понимаю, для чего предназначен оператор &
.
ByRef: А как насчет byref
? Это очень важно для меня, но я понимаю, что не понимаю этого.
Я понимаю, что он используется в функции, касающейся передачи параметров. Один использует byref, когда хочет, чтобы переданное значение можно было редактировать (это немного противоречит философии функциональных языков, но f # - это нечто большее). Рассмотрим следующее:
let myfunc (x: int byref) =
х
Это странно. Я знаю, что если у вас есть ссылка let myref = ref 10
, а затем сделайте это, чтобы отредактировать значение: myref , возникнет ошибка, потому что она должна быть такой:
myref: = 10
. Однако тот факт, что в этой функции я могу редактировать x
с помощью оператора , означает, что
x
не является ссылкой, верно?
Если я Предположим, что x
не является ссылкой, тогда я также предполагаю, что в функциях, когда используется byref
для параметра, к этому параметру может применяться изменяемый синтаксис. Так что это просто вопрос синтаксиса, если я предполагаю, что я в порядке, и, по сути, все работает (без ошибок компилятора). Однако что такое x
?
Вызов функций: Как я могу использовать функцию, использующую параметры byref?
Используется оператор &
, но не могли бы вы объяснить это лучше? В этой статье: Параметры и аргументы MSDN приведен следующий пример:
type Incrementor (z) =
член this.Increment (i: int byref) =
я