F# Seq.choose() 错误 FS0001
F# Seq.choose() Error FS0001
我已经在 .fsx 文件和 Visual Studio 的交互式 window 中尝试了 MSDN 的 example 的 Seq.choose 函数(写在下面),但它反复returns 错误 FS0001,说明 "None" 选项是 PageExt 类型而不是抽象选项类型 'a 选项。
我徒劳地搜索了 PageExt 类型的解释,或者为什么当 None 关键字应该只代表匹配表达式中的 "no value" 选项时这可能会返回错误。
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 会话的东西,它绑定了一些东西到 None
,基本上阻止了 FSI 识别正常的期权类型。
在 F# 中,您可以重复使用 "shadows" 原始值的名称。例如,在 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
名称来隐藏(或 "hides")原始绑定值。
在你的例子中,你有一个 None
名称绑定到具有 PageExt
类型的东西,该类型正在隐藏 Option.None,阻止它可用。
解决此问题的最简单方法是重置您的 FSI 会话。右键单击 F# Interactive window,然后选择 "Reset iteractive session"。如果您这样做,那么 运行 您粘贴的代码将正常工作。
我已经在 .fsx 文件和 Visual Studio 的交互式 window 中尝试了 MSDN 的 example 的 Seq.choose 函数(写在下面),但它反复returns 错误 FS0001,说明 "None" 选项是 PageExt 类型而不是抽象选项类型 'a 选项。
我徒劳地搜索了 PageExt 类型的解释,或者为什么当 None 关键字应该只代表匹配表达式中的 "no value" 选项时这可能会返回错误。
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 会话的东西,它绑定了一些东西到 None
,基本上阻止了 FSI 识别正常的期权类型。
在 F# 中,您可以重复使用 "shadows" 原始值的名称。例如,在 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
名称来隐藏(或 "hides")原始绑定值。
在你的例子中,你有一个 None
名称绑定到具有 PageExt
类型的东西,该类型正在隐藏 Option.None,阻止它可用。
解决此问题的最简单方法是重置您的 FSI 会话。右键单击 F# Interactive window,然后选择 "Reset iteractive session"。如果您这样做,那么 运行 您粘贴的代码将正常工作。