F# Option.flatten 错误 None
F# Option.flatten error with None
在选项模块上应用展平功能时出现错误:
let flatten =
function
| None -> None
| Some innerOpt -> innerOpt
这仅适用于输入,例如:Some Some 1。
但是如果输入是 "None" 那么我会得到这个错误:
flatten None
error FS0030: Value restriction. The value 'it' has been inferred to have generic type
val it : '_a option
Either define 'it' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
在 None 情况下,flatten 应该如何与泛型一起使用?
flatten
是类型为 'a option option -> 'a option
的泛型函数。当参数为 None
时,编译器无法推断类型参数用于自动 REPL 变量 it
(这是前一个表达式的结果)。您可以指定自己的变量:
let it : int option = flatten None;;
明确指定None
的类型:
flatten (None : int option option);;
或
flatten (Option<int option>.None);;
或明确指定泛型参数 flatten
:
flatten<int> None;;
这会生成一个警告,您可以通过将类型参数设置为 flatten
显式来删除该警告:
let flatten<'a> (o : 'a option option) =
match o with
| None -> None
| Some innerOpt -> innerOpt
在选项模块上应用展平功能时出现错误:
let flatten =
function
| None -> None
| Some innerOpt -> innerOpt
这仅适用于输入,例如:Some Some 1。 但是如果输入是 "None" 那么我会得到这个错误:
flatten None
error FS0030: Value restriction. The value 'it' has been inferred to have generic type
val it : '_a option
Either define 'it' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
在 None 情况下,flatten 应该如何与泛型一起使用?
flatten
是类型为 'a option option -> 'a option
的泛型函数。当参数为 None
时,编译器无法推断类型参数用于自动 REPL 变量 it
(这是前一个表达式的结果)。您可以指定自己的变量:
let it : int option = flatten None;;
明确指定None
的类型:
flatten (None : int option option);;
或
flatten (Option<int option>.None);;
或明确指定泛型参数 flatten
:
flatten<int> None;;
这会生成一个警告,您可以通过将类型参数设置为 flatten
显式来删除该警告:
let flatten<'a> (o : 'a option option) =
match o with
| None -> None
| Some innerOpt -> innerOpt