类型不匹配 - 适用于F#交互式,但不适用于真正的F#项目

时间:2014-09-27 23:56:20

标签: f# f#-interactive

我可以在F#interactive中执行此操作,并且工作正常:

> printf "%d\n" 5;;
5
val it : unit = ()

但如果我在"真实"中做同样的事情。 F#项目:

let main argv =
    printf "%d\n" 5

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

Type mismatch. Expecting a
    'a -> int    
but given a
    'a -> unit    
The type 'int' does not match the type 'unit'

将语句包含在ignore()中或将其设置为忽略(|> ignore)也不起作用。

这是一个语义错误,但我不知道如何推理它,谷歌没有帮助。

为什么它在F#交互式工作而不是在实际的F#项目中工作,为什么它在语义上是错误的?

2 个答案:

答案 0 :(得分:5)

我认为您的main函数具有EntryPoint属性。

F#(与大多数语言一样)要求main返回一个int。

只需在主页末尾添加0即可。

答案 1 :(得分:5)

正如John Palmer所说,entry point函数的类型为string array -> int,因此最后一行必须为int

但是,您不需要F#程序来获得入口点功能。您只需将代码放在项目中的最后一个.fs文件中即可。

enter image description here