将字符串数组映射到字符串数组

时间:2014-11-06 21:10:04

标签: arrays lambda f#

我在尝试编译时遇到此错误

  

运营商' expr。[idx]'已被用于不确定的对象   根据此计划点之前的信息进行输入。考虑添加   进一步的类型约束

这是代码

let convertFile fileName =
    let arrayToTransaction (arr: string[]) =
        arr 
        |> Array.map (fun x -> splitStr [|"\n"|])
        |> Array.map 
            (fun x -> { 
                        date = DateTime.Parse(x.[1]);
                        payee = x.[0].Substring(0, x.[0].IndexOf(','))
                        category = "Everyday Expenses: Groceries/Food"
                        memo = "Parsed with my F# parser"
                        outflow = Single.Parse(x.[2].Substring(str.IndexOf('-') + 1))
                        inflow = 0.0f
                      })

2 个答案:

答案 0 :(得分:1)

解决方案是完成错误消息所说的内容,并添加类型注释:

|> Array.map 
            (fun (x:string[]) -> { 
                        date = DateTime.Parse(x.[1]);
                        payee = x.[0].Substring(0, x.[0].Index

答案 1 :(得分:0)

我明白了,问题就在这一行

    |> Array.map (fun x -> splitStr [|"\n"|])

因为splitStr是一个带有两个参数的辅助函数,但是我认为lambda会" pipe" x进入它,但它没有那样工作我注意到这样改变它就可以了。

    |> Array.map (fun x -> splitStr [|"\n"|] x)