我得到了一些形式的计算结果'a option when 'a :> IBaseType
。有从 派生的类型树IBaseType
,我真的不知道这个是什么特定类型的选项,但重要的是它是特定派生的选项,而不是基类型。所以我想将它向上转换IBaseType option
以进一步处理它。由于 option 是泛型类型,因此无法直接进行强制转换(在 F# 中),我必须在 Option.map 内部进行强制转换。没什么复杂的,类型推断按预期工作......
中间转换选项也按预期解决......
直到功能完成。此时,由于某种原因,类型推断决定原始选项必须已经是 type IBaseType option
:
中间类型之前已经解决了,为什么决定重新分配的推断类型op
?当然这会导致运行时异常。看起来像编译器错误,但主要规则是编译器没有错误。
所以最后听起来真的很愚蠢:我不知道如何简单地向上转换简单的选项。只是为了让图片更清晰:作为论据processResult
。IBaseType option
这是麻烦功能的来源:
(fun (x: obj) ->
let op = x :?> _ option
let upcastOp = op |> Option.map (fun y -> y :> IBaseType)
upcastOp |> processResult)
任何想法如何处理这个?