我可以在F#做到这一点互动,并能正常工作:类型不匹配 - 在F#作品的互动,而不是在一个真正的F#项目
> 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()
结束语声明Ø r管道它忽略(|> ignore
)也不起作用。
这是一个语义错误,但我不知道如何推理它,谷歌没有帮助。
它为什么在F#交互中工作,而不是在实际的F#项目中,它为什么在语义上是错误的?
是的,就是这样。 * facepalm *我会在10分钟后立即接受答案。主要来自Java和C#背景,main通常不会返回任何值。 – rianjs 2014-09-27 23:59:59
@rianjs实际上,在C#中,main可以返回int或void。如果它返回int,则将该值作为进程返回代码传回OS。 F#不支持void选项。 – phoog 2014-09-28 07:55:34