gpt4 book ai didi

F# Seq.choose() 错误 FS0001

转载 作者:行者123 更新时间:2023-12-01 05:39:35 26 4
gpt4 key购买 nike

我试过 MSDN 的 example对于 .fsx 文件和 Visual Studio 的交互式窗口中的 Seq.choose 函数(如下所示),但它反复返回错误 FS0001,说明“None”选项是 PageExt 类型而不是抽象选项类型'一个选项。

我徒劳地搜索了 PageExt 类型的解释,或者为什么当 None 关键字应该只表示匹配表达式中的“无值”选项时这可能会返回错误。

let numbers = seq {1..20}
let evens = Seq.choose(fun x ->
match x with
| x when x%2=0 -> Some(x)
| _ -> None ) numbers
printfn "numbers = %A\n" numbers
printfn "evens = %A" evens
;;

| _ -> None ) numbers
---------------------------------------^^^^
>

C:Path\stdin(38,40): error FS0001: This expression was expected to have type
'a option
but here has type
PageExt

感谢任何人提供的任何帮助!

最佳答案

PageExt 类型很可能是您之前已拉入当前 FSI session 的东西,它将某些东西绑定(bind)到 None,实质上阻止了 FSI 识别正常的选项类型。

在 F# 中,您可以重用名称,这会“隐藏”原始值。例如,在 FSI 中,如果您键入:

let a = 1;;
let a = 2.3;;
a;;

你会注意到它显示:

val a : int = 1

然后

val a : float = 2.3

终于

val it : float = 2.3

这并没有改变 a 的定义,而是定义了一个新的 a 名称来隐藏(或“隐藏”)原始绑定(bind)值。

在您的情况下,您有一个 None 名称,该名称绑定(bind)到具有遮蔽 Option.None 的 PageExt 类型的内容,从而使其无法使用。

解决此问题的最简单方法是重置您的 FSI session 。在 F# Interactive 窗口中单击鼠标右键,然后选择“Reset iteractive session”。如果你这样做了,然后运行你粘贴的代码,它就可以正常工作了。

关于F# Seq.choose() 错误 FS0001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com