gpt4 book ai didi

f# - 尝试将对象转换为泛型类型结果出现 FS0013 错误

转载 作者:行者123 更新时间:2023-12-04 02:17:33 26 4
gpt4 key购买 nike

我正在尝试将 obj 转换为 'T,但在编译时收到 FS0013 错误。
我的代码有什么问题?
也许它坏了,因为我试图从 C# 中“映射”它,而这在 F# 中以完全不同的方式完成?

let myFunc (x : Option<'T>) =
match x with
None -> failwith "wtf"
| Some x -> Convert.ChangeType(x, typedefof<'T>) :> 'T

完整的错误文本:

error FS0013: The static coercion from type obj
to 'T
involves an indeterminate type based on information prior to this program point. Static coercions are not allowed on some types. Further type annotations are needed.

更新:这是我正在尝试编写的实际功能。 Option 的值用于我没有自己的值的情况。

let ( %? ) (defaultValue : Option<'a>) (parameterName : string) 
= match (environVar parameterName) with
null -> match defaultValue with
None -> failwith "No value found as well as default value is not set"
| Some defaultVal -> defaultVal
| x -> let objectResult = Convert.ChangeType(x, typedefof<'a>)
objectResult :> 'a

最佳答案

你不需要转换!

随便写:

  | Some x -> x

那么你的函数就是通用的。模式匹配已经分解了类型并从选项中解包了值。不要将 obj 与通用 'T 混淆。返回 obj 的函数不一定是通用的。

编辑

更新后,您可以使用它:

objectResult :?> 'a

但是您将没有运行时保证。

在 F# 中,:> 表示“向上转换”,:?> 表示“向下转换”(如果可以的话)。前者具有编译时检查,这就是为什么“cast”分为 2 个不同的操作。

关于f# - 尝试将对象转换为泛型类型结果出现 FS0013 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014832/

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