好吧,我开始明白 F# 能够管理引用(某种 C++ 之类的引用)。这使得改变函数中传递的参数的值成为可能,并且还使程序员能够返回多个值。但是,这是我需要知道的:
Ref 关键字:该关键字
ref
用于从一个值创建对推断类型的该值的引用。所以let myref = ref 10
这意味着 F# 将创建一个类型的对象
Ref<int>
放在那里(在可变字段中) myint 10
。好的。所以我假设它
ref
用于创建Ref<'a>
类型的实例。这是正确的吗?访问值:为了访问存储在引用中的值,我可以这样做:
let myref = ref 10 let myval = myref.Value let myval2 = !myref
虽然
:=
操作员只是让我像这样编辑值:let myref = ref 10 myref.Value <- 30 myref := 40
所以
!
(Bang) 取消引用我的参考。并:=
编辑它。我想这也是正确的。& 运算符:这个运算符是做什么的?它是否适用于引用类型?不,我想它必须应用于可变值,这会返回什么?参考资料?地址?如果使用交互式:
let mutable mutvar = 10;; &a;;
最后一行抛出一个错误,所以我不明白
&
运算符的用途。ByRef:那
byref
呢?这对我来说很重要,但我意识到我不明白。我知道它用于有关参数传递的功能。当他希望可以编辑传递的值时使用 byref(这有点违背函数式语言的理念,但 f# 不止于此)。考虑以下:let myfunc (x: int byref) = x <- x + 10
这很奇怪。我知道,如果你有一个参考
let myref = ref 10
,然后这样做来编辑值:myref <- 10
它会出现一个错误,因为它应该是这样的:myref := 10
。但是,在该函数中我可以x
使用<-
运算符进行编辑这一事实意味着这x
不是参考,对吧?如果我假设这
x
不是参考,那么我还假设,在函数中,当byref
在参数上使用时,该参数可以应用可变语法。所以这只是语法问题,如果我假设我没问题,而且事实上,一切正常(没有编译器错误)。然而,什么是x
?调用函数:如何使用利用 byref 参数的函数?
运营商参与其中
&
,但您能更好地解释一下吗?在本文中:MSDN 参数和参数中提供了以下示例:type Incrementor(z) = member this.Increment(i : int byref) = i <- i + z let incrementor = new Incrementor(1) let mutable x = 10 // A: Not recommended: Does not actually increment the variable. (Me: why?) incrementor.Increment(ref x) // Prints 10. printfn "%d" x let mutable y = 10 incrementor.Increment(&y) (* Me: & what does it return? *) // Prints 11. printfn "%d" y let refInt = ref 10 incrementor.Increment(refInt) (* Why does it not work in A, but here it does? *) // Prints 11. printfn "%d" !refInt