gpt4 book ai didi

.net - 字符串 vs 字符串 - 区分大小写的联合

转载 作者:行者123 更新时间:2023-12-04 14:13:11 28 4
gpt4 key购买 nike

If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它:

type JustAString = string
> type JustAString = string

type JustAStringAgain = String
> type JustAStringAgain = | String

最佳答案

现有答案是正确的 string是 F# 类型,而 String不是类型(除非您打开 System 命名空间),这就是这两个定义不同的原因。第一种情况创建一个类型别名,而第二种情况声明一个可区分的联合(而不是现有答案中建议的模块别名)。

在第一种情况下,定义只创建了一个类型别名。我们可以使用 typeof<T> 进行检查。 :

> type MyString = string;;

> typeof<MyString>.FullName;;
val it : string = "System.String"

在第二种情况下,您要定义一个有区别的联合,它有一个名为 String 的单个案例。 (名称可以是任何东西 - 关键是 String 不是已知类型,因此它被视为案例名称)。要检查这一点,我们可以使用 GetUnionCases来自 F# 反射模块:
> type MyString = String;;
type MyString = | String

> open Microsoft.FSharp.Reflection
for u in FSharpType.GetUnionCases(typeof<MyString>) do
printfn "%s" u.Name;;
String
val it : unit = ()

该定义只是一个非常基本的歧视联合案例。我们可以添加更多案例,案例也可以包含字段:
type MyString = String | SomeOtherName of int

诀窍是 String不是已知的类型名称。如果您打开 System命名空间,然后你又得到一个类型别名:
> open System;;
> type MyString = String;;

> typeof<MyString>.FullName;;
val it : string = "System.String"

关于.net - 字符串 vs 字符串 - 区分大小写的联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22457739/

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