如何使用 F# 将 int 插入字符串?

Cod*_*Lee 2 .net f# typing

我正在尝试一个真正基本的示例应用程序,但是 MS 的F# 简介中的这个特定示例在智能感知中产生了此警告:

\n
Type mismatch. Expecting a\n    \'\'a -> int\'    \nbut given a\n    \'\'a -> unit\'    \nThe type \'int\' does not match the type \'uint\'F# Compiler1\n
Run Code Online (Sandbox Code Playgroud)\n

从这段代码:(fwiw我已经尝试了sum的隐式和显式类型)

\n
Type mismatch. Expecting a\n    \'\'a -> int\'    \nbut given a\n    \'\'a -> unit\'    \nThe type \'int\' does not match the type \'uint\'F# Compiler1\n
Run Code Online (Sandbox Code Playgroud)\n

然后,当我编译时,如预期的那样,根据警告,我收到此错误:

\n
open 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\n
Run Code Online (Sandbox Code Playgroud)\n

作为 F# 新手,我不确定为什么 printfn 函数认为 int 是一个单位并破坏编译。确实可以使用解释和/或文档链接来说明为什么会出现这种情况以及如何解决它。

\n
\n

编辑

\n

因此,有趣的是,即使当我一起删除插值并仅打印字符串时,我也会得到相同的错误。所以根本没有 int,但字符串需要一个 int 而不是单位……但是,为什么呢?我猜我有某种语法错误,尽管这看起来很奇怪。

\n

Fyo*_*kin 5

main函数应该返回一个int,它将成为程序执行结果。约定是:零表示成功,非零表示错误代码(这不是 F# 特定的)。

当您使用 创建新项目时dotnet new,如练习所示,main生成的函数将返回零。

但正如您在评论中确认的那样,您的main函数当前没有零,这可能意味着您不小心删除了它。

只需重新添加零,错误就会消失。


在闪亮的新 .NET 6 中,默认生成器生成一个隐式入口点,而不是好的 ol'main函数,在这种情况下不需要返回值,如果您确实想返回一个,则必须使用该exit函数。

然而,这显然不适用于当前问题,因为OP的生成器生成了一个main函数,而不是隐式入口点。

  • 不完全正确@BrentTranberg。在我的安装(.NET 5)中,它确实生成了一个“main”函数,根据他们的问题判断,对于OP也是如此。不过,我对答案做了一些澄清。 (2认同)