2014-11-06 106 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