If string
is an alias of String in the .net framework为什么会å‘生这ç§æƒ…况,我应该如何解释它:
type JustAString = string
> type JustAString = string
type JustAStringAgain = String
> type JustAStringAgain = | String
ç”案 0 :(得分:9)
现有ç”案是æ£ç¡®çš„ï¼Œå› ä¸ºstring
是F#类型,而String
ä¸æ˜¯ç±»åž‹ï¼ˆé™¤éžæ‚¨æ‰“å¼€System
命å空间),这就是两个定义ä¸åŒçš„åŽŸå› ã€‚ç¬¬ä¸€ç§æƒ…况创建一个类型别å,而第二ç§æƒ…况声明æ§è§†è”盟(而ä¸æ˜¯çŽ°æœ‰ç”案ä¸å»ºè®®çš„模å—别å)。
在第一ç§æƒ…况下,定义åªåˆ›å»ºä¸€ä¸ªç±»åž‹åˆ«å。我们å¯ä»¥ä½¿ç”¨typeof<T>
:
> type MyString = string;;
> typeof<MyString>.FullName;;
val it : string = "System.String"
在第二ç§æƒ…况下,您æ£åœ¨å®šä¹‰ä¸€ä¸ªå…·æœ‰å为String
çš„å•ä¸ªæ¡ˆä¾‹çš„æ§è§†è”盟(å称å¯èƒ½æ˜¯ä»»ä½•ä¸œè¥¿ - 关键是String
ä¸æ˜¯å·²çŸ¥ç±»åž‹ï¼Œå› æ¤å®ƒè¢«è§†ä¸ºæ¡ˆä»¶çš„å称)。è¦æ£€æŸ¥è¿™ä¸€ç‚¹ï¼Œæˆ‘们å¯ä»¥ä½¿ç”¨F#å射模å—ä¸çš„GetUnionCases
:
> 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"