【发布时间】:2021-12-22 15:03:31
【问题描述】:
我正在尝试应该是一个非常基本的示例应用程序,但是来自 MS 的 F# intro 的这个特定示例在智能感知中产生了这个警告:
Type mismatch. Expecting a
''a -> int'
but given a
''a -> unit'
The type 'int' does not match the type 'uint'F# Compiler1
从此代码:(我已经尝试过 sum 的隐式和显式类型)
open System
[<EntryPoint>]
let main argv =
printfn "Welcome to the calculator program"
printfn "Type the first number"
let firstNo = Console.ReadLine()
printfn "Type the second number"
let secondNo = Console.ReadLine()
printfn "First %s, Second %s" firstNo secondNo
let sum: int = 0
printfn "The sum is %i" sum
然后,当我编译时,我得到了这个错误,正如预期的那样,基于警告:
error FS0001: Type mismatch. Expecting a↔ ''a -> int' ↔but given a↔ ''a -> unit' ↔The type 'int' does not match the type 'unit' [C:\Users\user-name\source\repos\MyFSharpApp\MyFSharpApp.fsproj]
作为 F# 的新手,我不确定为什么 printfn 函数认为 int 是一个单元并且会破坏编译。真的可以使用解释和/或链接到文档来说明为什么会这样以及如何解决它。
编辑
所以有趣的一点是,即使我将插值全部删除并只打印一个字符串,我也会得到相同的错误。所以根本没有 int,但是字符串需要一个 int 而不是一个单位……但是,为什么?我猜我有某种语法错误,尽管这看起来很奇怪。
【问题讨论】:
-
在添加练习中的代码时,您是否有机会删除了
main末尾的零? -
main函数应返回int(0 表示成功),因此给定签名'a -> int。只需在函数末尾添加一行仅包含0的行(当前返回unit)。 -
@FyodorSoikin 和 Romain Deneau,你们都是正确的,缺少零。该教程没有显示零,我想我在没有意识到的情况下复制了它或删除了它。如果你们中的一个人想用例子来解释为什么需要这样的答案,我认为这会帮助其他犯这个简单错误的新手。谢谢!