F# byref param not mutable



我需要分配给byref参数,但是,在Windows 8x64盒子上使用F# 4.0和.NET 4.5.2,我不断收到抱怨This value is not mutable.我无法更改签名,因为我正在实现COM接口。 最小损坏示例:

module Utils = 
    let bugFix1([<System.Runtime.InteropServices.Out>] ID : System.String byref) = ID <- "Hi!"
    let bugFix1([<System.Runtime.InteropServices.Out>] ID : int byref) = ID <- 0
    let bugFix1([<System.Runtime.InteropServices.Out>] ID : System.Guid byref) = ID <- System.Guid.NewGuid()

this value,这绝对意味着ID,因为我分配给ID什么并不重要。 另请注意,类型是否可 blitit,或者它是堆分配的还是堆栈分配的并不重要。

有没有办法将ID声明为mutable

我认为

您发现了另一个错误(或未记录的功能?发生这种情况仅仅是因为您的参数名称是大写的。惊喜!:-)

这些变体将起作用(为简洁起见,省略[<Out>]):

let bugFix1(id : string byref) = id <- "Hi!"
let bugFix1(iD : string byref) = iD <- "Hi!"

但这些将失败:

let bugFix1(Id : string byref) = Id <- "Hi!"
let bugFix1(ID : string byref) = ID <- "Hi!"

我完全不知道为什么大写很重要。我猜这以前从未出现过,因为按照惯例,参数总是以小写字母开头。

我打算再谷歌一些,然后提交一个问题。

相关内容

  • 没有找到相关文章

最新更新