在F#中声明内部类型

时间:2013-06-10 20:05:18

标签: types f#

最近我遇到了类似的代码清单:

type MyType =
  | MyType of int

and internal MyInternal =
  | One of MyType
  | Two of MyType

我不熟悉'和内部'的用法(在第三行),我想知道使用'type internal'之间是否有任何区别:

type MyType =
  | MyType of int

type internal MyInternal =
  | One of MyType
  | Two of MyType

我已经对这两种形式进行了简单的实验,但我看不出有什么区别。这只是两种不同的方式来写同样的东西吗?

2 个答案:

答案 0 :(得分:5)

在这种情况下,and关键字将用于定义mutally recursive types MyTypeMyInternal。由于MyTypeMyInternal不是相互递归的,因此不需要and

正如MSDN页面所述:

  

除了第一个关键字外,所有关键字都替换了type关键字   定义

所以定义是等价的。

答案 1 :(得分:3)

不,您建议的代码肯定更具惯用性。

type T = ...
and U = ...

通常仅在类型相互递归时使用。使用内部类型会更奇怪,因为第一种类型的构造函数也需要内部构造:

type T = internal | T of U
and internal U = | U of T
相关问题