我正在尝试一个真正基本的示例应用程序,但是 MS 的F# 简介中的这个特定示例在智能感知中产生了此警告:
\nType mismatch. Expecting a\n \'\'a -> int\' \nbut given a\n \'\'a -> unit\' \nThe type \'int\' does not match the type \'uint\'F# Compiler1\nRun Code Online (Sandbox Code Playgroud)\n从这段代码:(fwiw我已经尝试了sum的隐式和显式类型)
\nType mismatch. Expecting a\n \'\'a -> int\' \nbut given a\n \'\'a -> unit\' \nThe type \'int\' does not match the type \'uint\'F# Compiler1\nRun Code Online (Sandbox Code Playgroud)\n然后,当我编译时,如预期的那样,根据警告,我收到此错误:
\nopen System\n\n[<EntryPoint>]\nlet main argv =\n printfn "Welcome to the calculator program"\n printfn "Type the first number"\n let firstNo = Console.ReadLine()\n printfn "Type the second number"\n let secondNo = Console.ReadLine()\n printfn "First %s, Second %s" firstNo secondNo\n let sum: int = 0\n printfn "The sum is %i" sum\nRun Code Online (Sandbox Code Playgroud)\n作为 F# 新手,我不确定为什么 printfn 函数认为 int 是一个单位并破坏编译。确实可以使用解释和/或文档链接来说明为什么会出现这种情况以及如何解决它。
\n因此,有趣的是,即使当我一起删除插值并仅打印字符串时,我也会得到相同的错误。所以根本没有 int,但字符串需要一个 int 而不是单位……但是,为什么呢?我猜我有某种语法错误,尽管这看起来很奇怪。
\n该main函数应该返回一个int,它将成为程序执行结果。约定是:零表示成功,非零表示错误代码(这不是 F# 特定的)。
当您使用 创建新项目时dotnet new,如练习所示,main生成的函数将返回零。
但正如您在评论中确认的那样,您的main函数当前没有零,这可能意味着您不小心删除了它。
只需重新添加零,错误就会消失。
在闪亮的新 .NET 6 中,默认生成器生成一个隐式入口点,而不是好的 ol'main函数,在这种情况下不需要返回值,如果您确实想返回一个,则必须使用该exit函数。
然而,这显然不适用于当前问题,因为OP的生成器生成了一个main函数,而不是隐式入口点。