我可以在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#项目中工作,为什么它在语义上是错误的?
答案 0 :(得分:5)
我认为您的main
函数具有EntryPoint
属性。
F#(与大多数语言一样)要求main返回一个int。
只需在主页末尾添加0
即可。
答案 1 :(得分:5)
正如John Palmer所说,entry point函数的类型为string array -> int
,因此最后一行必须为int
。
但是,您不需要F#程序来获得入口点功能。您只需将代码放在项目中的最后一个.fs
文件中即可。