f# - 在构造期间从自身内部引用记录

标签 f# record

我正在尝试创建一条记录,该记录使用先前定义的字段之一来计算同一构造函数中另一个字段的值。例如

myRecordType = {Foo:int; Bar:int[]}

myRecord = {Foo = 5;
            Bar = Array.init Foo (fun i -> i)}

当我尝试这样做时,它无法将 Foo 识别为已经存在。我也无法使用 myRecord.Foo 引用 Foo,但这是有道理的,因为 myRecord 尚未构建。但是我会认为 FooBar 会在同一个范围内,所以 Bar 可以访问 Foo ,但显然不是。

Bar 数组的大小取决于Foo 的值,那么如何设置这种格式的记录呢?

最佳答案

您不能引用其他字段,您甚至不应该认为字段评估的顺序是理所当然的。

你可以通过额外的 let 绑定(bind)来实现:

let myrecord = 
    let calcedFoo = 5
    { Foo = calcedFoo; Bar = Array.init calcedFoo id }

您可以将记录构造表达式视为一个函数,其中赋值的右侧是传递给该函数的参数。

关于f# - 在构造期间从自身内部引用记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406610/

相关文章:

f# - 以下 FsCheck 测试有什么问题

haskell - 创建记录表单列表的最短方法是什么?

excel - M(Power Query 公式语言)中开放记录类型的目的和用法

php - 为什么 UPDATE 会创建新记录?

MySQL : XML from a resultset?

Javascript错误: Either BOF or EOF is True,或当前记录已被删除

f# - F#函数否定链

f# - Collections.map 的对象列表

c# - 单元素元组和零元素元组有什么用?

f# - 可区分联合上的模式匹配