我只是想知道是否有人可以向我解释如何将参考单元传递给非类成员的函数.我一直在关注msdn页面msdn参考单元格
我有以下代码:
let myint = ref 32
let mutable myint2 = 23
type addone() =
member t.myadd1func (x:int byref) =
x <- x + 1
let myadd1func (x:int byref) =
x <- x + 1
let adder = new addone()
adder.myadd1func myint
// myadd1func myint <---- this line does not compile
myadd1func &myint2 // <----- this line does though
printfn "%d" !myint
printfn "%d" myint2
Run Code Online (Sandbox Code Playgroud)
我的问题是......我对该类的"Myadd1func"方法和之后定义的"myadd1func"函数的调用之间的根本区别是什么?
在我写这篇文章时,我猜测该函数不喜欢将.net对象引用传递给它,因为这可能会破坏与其他IL组件的兼容性?我不介意使用可变值,我只是想了解这些事情.
谢谢
我认为byrefF#中的类型应仅用于互操作性purpsoes,其中现有功能(如kvb所解释)足够好.如果你想声明一个修改传递给它的参数的函数,我只会使用普通的引用单元格(例如int reftype):
let myadd1func (x:int ref) =
x := !x + 1
let myint = ref 10
myadd1func myint
Run Code Online (Sandbox Code Playgroud)
这可能比使用byref类型(与本地mutable值一起)稍慢,但我不认为它在功能样式中经常需要,所以应该没问题.