dev*_*ium 16 .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
Run Code Online (Sandbox Code Playgroud)
为什么人们会使用关键字and
而不是type
?
Jar*_*Par 24
该and
是需要的定义Grammar
和Definition
正确编译.的Grammar
类型显示第一,但取决于类型Definition
稍后定义.为了正确编译,它必须与and
F#编译器链接,告诉F#编译器类型定义是依赖/相关的.
没有理由Range
以这种方式宣布并且应该宣布type
Mar*_*k H 15
它用于创建相互关联的类型.通常在F#中,您需要在使用之前转发声明每种类型 - 但这并不总是可行的,例如,当您需要在两种或更多类型上引入循环依赖时.
在您的示例中,如果您Definition
使用type
而不是定义,则and
无法编译定义Grammar
,除非您切换了定义它们的顺序.
您发布的代码示例并不是一个好的代码示例,因为相关关系不是必需的 - 您可以更改顺序.(除非有更多的类型进一步定义,这取决于上述情况).
归档时间: |
|
查看次数: |
1790 次 |
最近记录: |