F#:使用列表从现有记录创建新记录

时间:2014-02-05 17:03:41

标签: list f# record

假设我的类型定义如下:

type State = { intList : int list }

和值如下:

let a = { intList = [1; 2; 3; 4] }

现在假设我想要一个新值b,其中a的值为5,并添加到最后。我无法弄清楚如何使用with语法来做到这一点。另外,我无法弄清楚如何获得一个新元素,例如。

2 个答案:

答案 0 :(得分:4)

with语法(复制和更新表达式)不允许基于另一个记录的已修改属性创建记录,仅复制某些属性(完整)并替换其他属性。您可以使用普通记录构造函数:

let a = { intList = [1; 2; 3; 4] }
let b = { intList = a.intList @ [1; 2; 3; 4; 5] }
let c = { intList = List.tail a.intList }

答案 1 :(得分:2)

正如Daniel所说,没有特定的语法来从您正在复制和更新的记录中读取属性。但您仍然可以使用普通的点符号访问它:

let a = { intList = [1; 2; 3; 4] }

let b = { a with intList = a.intList @ [5] }

当然,在这种情况下,由于您要更新所有字段,因此with非常无用,因此您也可以使用新的记录语法(如Daniel所示)。但是,如果记录中还包含您希望从a保留到b的字段,我就会这样做。