F#,小型推理/注释错误

时间:2015-08-04 20:59:20

标签: datetime types f# type-inference

F#中的这一行给出了可能需要类型注释的错误,在" x.Day"。

  let daysList = List.map (fun x -> x.Day) datesList

但intellisense显示x的类型为DateTime(在"有趣的x")。而且datesList的类型是DateTime列表。所以我很困惑为什么我必须像这样声明x的类型然后一切正常:

  let daysList = List.map (fun (x:System.DateTime) -> x.Day) datesList

1 个答案:

答案 0 :(得分:5)

F#编译器通常更喜欢从左到右推断类型,所以如果你使用管道运算符编写它,它就有用,假设datesListDateTime list

let daysList = datesList |> List.map (fun x -> x.Day)

为什么IntelliSense可以确定xDateTime?打败了我,但根据我的经验,IntelliSense有时会不同意编译器这一点很常见。

顺便说一句,从左到右规则似乎也不一定严格。在我把一切都搞定之前,我经常要做一些实验。