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
答案 0 :(得分:5)
F#编译器通常更喜欢从左到右推断类型,所以如果你使用管道运算符编写它,它就有用,假设datesList
是DateTime list
:
let daysList = datesList |> List.map (fun x -> x.Day)
为什么IntelliSense可以确定x
是DateTime
?打败了我,但根据我的经验,IntelliSense有时会不同意编译器这一点很常见。