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

ria*_*njs 0 f# f#-interactive

我可以用F#interactive做到这一点,它运行正常:

> printf "%d\n" 5;;
5
val it : unit = ()
Run Code Online (Sandbox Code Playgroud)

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

let main argv =
    printf "%d\n" 5
Run Code Online (Sandbox Code Playgroud)

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

Type mismatch. Expecting a
    'a -> int    
but given a
    'a -> unit    
The type 'int' does not match the type 'unit'
Run Code Online (Sandbox Code Playgroud)

将语句包装ignore()或管道化为ignore(|> ignore)也不起作用.

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

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

Joh*_*mer 5

我假设你的main函数有EntryPoint属性.

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

只需0在主要结尾添加即可.


kim*_*msk 5

正如John Palmer所说,入口点函数有一个类型string array -> int,所以最后一行必须是int.

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

在此输入图像描述