在lambda中创建记录

时间:2014-11-06 20:27:36

标签: lambda f# record

我在将数组内的数组转换为记录类型时遇到了一些麻烦。违规代码就是这个

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类型''a []'不包含字段'date'

但我已经正确定义了记录类型,因为:

let x = { date = DateTime.Now; payee = "test"; category = "test"; memo = "test"; outflow = 0.0f; inflow = 0.0f }

工作得很好。

1 个答案:

答案 0 :(得分:1)

传递给Array.collect的函数应该返回一个数组,而不是一个记录。您可以使用[| ... |]将记录包装在数组中,也可以使用Array.map代替Array.collect