繁体   English   中英

在受歧视的联盟中使用F#中的and关键字

[英]Use of the and keyword in F# in discriminated unions

我今天面临以下DUs声明:

type Grammar = Definition list

and  Definition = Def of string * Expression

and  Range =
     | Char  of char
     | Range of char * char

为什么人们会使用关键字and不是type

and被需要的定义GrammarDefinition正确编译。 首先列出Grammar类型,但取决于稍后Definition的类型Definition 为了正确编译,它必须与之链接, and告诉F#编译器类型定义是依赖/相关的。

没有理由以这种方式声明Range ,并且应该用type声明

它用于创建相互关联的类型。 通常在F#中,您需要在使用之前转发声明每种类型 - 但这并不总是可行的,例如,当您需要在两种或更多类型上引入循环依赖时。

在您的示例中,如果您使用type而不是and定义Definition ,则无法编译Grammar的定义,除非您切换了定义它们的顺序。

您发布的代码示例并不是一个好的代码示例,因为相关关系不是必需的 - 您可以更改顺序。 (除非有更多的类型进一步定义,这取决于上述情况)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM