2014-11-06 100 views
0

当我试图编译映射字符串数组为字符串

操作者我得到这个误差的阵列“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 
         }) 

回答

1

解决的办法是做完全的错误消息所说的话,并添加类型注释:

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

这不起作用,不幸的是,它说。 '这个表达式预计有 字符串 - >字符串[] ,但这里有 string []'。这对我来说没有什么意义,因为数组是字符串的集合。 – 2014-11-06 21:14:13

+2

问题是您的'splitStr'调用较早的一行。你根本没有传入'x'字符串。 – scrwtp 2014-11-06 21:26:10

+0

是的,我在你发布的同一时间计算出来。我以为lambda会“管”x到'splitStr'唉,它似乎并不如此。 – 2014-11-06 21:28:13

0

我想通它出来了,问题是这条线

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

因为splitStr是一个帮助函数,它有两个参数,但我认为lambda会“管”x进去,但它不工作,我注意到这样改变它的工作。

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

没错,没有任何内容可以隐式完成。如果你这样做,你可以使它成为无点:'Array.map(splitStr [|“\ n”|])''。 – scrwtp 2014-11-06 21:35:25