gpt4 book ai didi

f# - F# 中一个非常基本的类型检查失败......为什么?

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

我写了这段代码

type Test =
| Age of int
| Name of string;;

let x = Age(10);;


if (x.GetType() = typeof<Test>) then printfn "true" else printfn "false";;

代码打印错误。但这让我感到困惑,因为不是 Age of type Test 吗?

另外,是否有更好的方法来比较 F# 中的类型 .GetType() = typeof<>很长。我试过 :?但我认为这是为了类型转换而不是比较类型。

最佳答案

简单的答案是,这样做:

if (x :> obj) :? Test then printfn "true" else printfn "false"

这个问题是因为 DU 的实现(使用内部类和标签)和 F# 类型系统的限制(不承认实现)。

如您所见, x 的类型是 FSI_0001+Test+Age ,并且 F# 不会将其识别为 Test 的子类型.

关于f# - F# 中一个非常基本的类型检查失败......为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046085/

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