gpt4 book ai didi

F# byref 参数不可变

转载 作者:行者123 更新时间:2023-12-01 00:43:52 25 4
gpt4 key购买 nike

我需要分配一个 byref 参数,但是,在 Windows 8x64 机器上使用 F# 4.0 和 .NET 4.5.2,我不断收到关于 This value is not mutable. 的投诉。我无法更改签名,因为我正在实现 COM 接口(interface)。最小损坏示例:

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 的内容并不重要.还要注意,该类型是否是 blittable 或它是堆分配还是堆栈分配都无关紧要。

有什么方法可以声明 IDmutable ?

最佳答案

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

这些变体将起作用(为简洁起见,省略了 [<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!"

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

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

关于F# byref 参数不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36020112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com