[英]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
被需要的定义Grammar
和Definition
正确编译。 首先列出Grammar
类型,但取决于稍后Definition
的类型Definition
。 为了正确编译,它必须与之链接, and
告诉F#编译器类型定义是依赖/相关的。
没有理由以这种方式声明Range
,并且应该用type
声明
它用于创建相互关联的类型。 通常在F#中,您需要在使用之前转发声明每种类型 - 但这并不总是可行的,例如,当您需要在两种或更多类型上引入循环依赖时。
在您的示例中,如果您使用type
而不是and
定义Definition
,则无法编译Grammar
的定义,除非您切换了定义它们的顺序。
您发布的代码示例并不是一个好的代码示例,因为相关关系不是必需的 - 您可以更改顺序。 (除非有更多的类型进一步定义,这取决于上述情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.