我试图在同一个构造函数中创建一个记录,该记录使用之前定义的字段之一来计算另一个字段的值.例如
myRecordType = {Foo:int; Bar:int[]}
myRecord = {Foo = 5;
Bar = Array.init Foo (fun i -> i)}
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,它不会识别Foo已存在.我也不能参考Foo使用myRecord.Foo,但这是有道理的,因为myRecord尚未构建.但是我会想到Foo并且Bar会在相同的范围内,所以Bar可以访问Foo,但显然不是.
Bar数组的大小取决于数值Foo,那么如何设置这种格式的记录呢?
你不能引用其他字段,你甚至不应该理所当然地认为字段评估的顺序.
你可以通过额外的let绑定来做到这一点:
let myrecord =
let calcedFoo = 5
{ Foo = calcedFoo; Bar = Array.init calcedFoo id }
Run Code Online (Sandbox Code Playgroud)
您可以将记录构造表达式视为一个函数,其中赋值的右侧是传递给该函数的参数.