F#中的“and”关键字

Tho*_*mas 5 f#

来自https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/keyword-reference的文档:

在此处输入图片说明

看起来'and'可以用在上面的四个类别中。通过记录和约束,我看到了用例。但是任何人都可以说明 let 绑定和成员的用途吗?

我在这个要点中看到了一个例子:https : //gist.github.com/theburningmonk/3199252,但我不确定它是如何工作的。

Tom*_*cek 5

对于 let 绑定和成员,and关键字用于定义相互递归的类型和函数。一个带有函数的愚蠢示例:

let rec f x = g x + 1
and g x = f x - 1
Run Code Online (Sandbox Code Playgroud)

一个带有类的愚蠢示例:

type A() = 
  member x.B = B()
and B() = 
  member x.A = A()
Run Code Online (Sandbox Code Playgroud)

类的情况确实涵盖了所有可能的类型定义,包括记录和可区分联合:

type A = 
  | Aaa of int 
  | Aaaa of C
and C = 
  { Bbb : B }
and B() = 
  member x.Bbb = Aaa 10
Run Code Online (Sandbox Code Playgroud)