在lambda内创建记录
问题描述:
我在将数组内部的数组转换为记录类型时遇到了一些麻烦。有问题的代码是这样的在lambda内创建记录
let arrayToTransaction arr =
arr
|> Array.map (fun x -> splitStr [|"\n"|])
|> Array.collect
(fun x -> {
date = DateTime.Parse(x.[1]);
payee = x.[0].Substring(0, x.[0].IndexOf(','))
category = "Test category"
memo = "Parsed with my F# parser"
outflow = Single.Parse(str.Substring(str.IndexOf('-') + 1))
inflow = 0.0f
})
我得到的错误是
错误1型“”一[]”不包含字段‘日期’
但我已经正确定义了记录类型,我知道这是因为:
let x = { date = DateTime.Now; payee = "test"; category = "test"; memo = "test"; outflow = 0.0f; inflow = 0.0f }
工作得很好。
答
传递给Array.collect
的函数应该返回一个数组而不是一条记录。你可以用[| ... |]
或者Array.map
而不是Array.collect
来包装你的记录。