.net F#中and关键字在歧视工会中的使用
我今天面临着以下DUs声明:.net F#中and关键字在歧视工会中的使用,.net,f#,functional-programming,discriminated-union,.net,F#,Functional Programming,Discriminated Union,我今天面临着以下DUs声明: type Grammar = Definition list and Definition = Def of string * Expression and Range = | Char of char | Range of char * char 为什么要在这里使用关键字和而不是类型。语法和定义需要和才能正确编译。首先列出语法类型,但取决于后面定义的类型定义。为了正确编译,它必须与和链接,告诉F#编译器类型定义是相关的 没有理由以这
type Grammar = Definition list
and Definition = Def of string * Expression
and Range =
| Char of char
| Range of char * char
为什么要在这里使用关键字
和而不是类型。语法和定义需要和才能正确编译。首先列出语法
类型,但取决于后面定义的类型定义
。为了正确编译,它必须与和
链接,告诉F#编译器类型定义是相关的
没有理由以这种方式声明范围
,而应该使用类型
声明它用于创建相互关联的类型。通常在F#中,在使用每个类型之前需要向前声明它-但这并不总是可能的,例如,当需要在两个或更多类型上引入循环依赖时
在您的示例中,如果使用type
而不是和定义Definition
,则无法编译语法的定义,除非您切换了定义顺序
您发布的代码示例并不完全是一个好的示例,因为其中不需要相互关系-您可以更改顺序。(除非有更多的类型进一步定义,这取决于上述内容)。此外,语法可以放在定义
声明之后,这样就没有理由对其中任何一个使用和
。