我正在阅读F#并查看人们的源代码,我有时会看到
Type test =
| typeone
| typetwo
Run Code Online (Sandbox Code Playgroud)
有时候我会看到
type test = typeone | typetwo
Run Code Online (Sandbox Code Playgroud)
其中一个之前有一个管道而另一个没有.起初我认为一个是enum vs歧视联盟,但我认为他们是一样的.如果有人可以解释差异吗?
没有区别.这些符号完全相同.前导管道字符是可选的.
让第一个管道可选有助于使代码在不同情况下看起来更好.特别是,如果我的类型有很多种情况,并且每种情况都有大量数据,那么将它们放在不同的行上是有意义的.在这种情况下,引导管使它们看起来在视觉上对齐,以便读者将它们视为单个逻辑单元:
type Large =
| Case1 of int * string
| Case2 of bool
| SomeOtherCase
| FinalCase of SomeOtherType
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我只需要两到三个案例,我可以将它们放在一行上.在这种情况下,领先的管道只会妨碍,造成一种混乱的感觉:
type QuickNSmall = One | Two | Three
Run Code Online (Sandbox Code Playgroud)
没有区别.
在规范中,第一个|是可选的.
规范的相关部分是这样的:
union-type-cases:='|'opt union-type-case'|' ......'|' 联合型的情况下
枚举需要为案例提供明确的值
Type test =
| typeone = 1
| typetwo = 2
Run Code Online (Sandbox Code Playgroud)