我试图将带有int元素的Array2D optionArr
转换为带有int元素的Array2D arr
:
let arr =
optionArr
|> Array2D.map (fun x ->
match Option.toArray x with
| [| |] -> -1
| [| v |] -> v)
但是,Visual Studio 2013使用红色突出显示从Array2D.map ...
到... -> v)
的所有内容,并说:
Type mismatch. Expecting a
int [,] option -> 'a
but given a
'b [,] -> 'c [,]
The type 'int [,] option' does not match the type ''a [,]'
我一直试图“修复”我的代码,但我不知道我做错了什么,也不知道上面的错误信息是什么。
修改
我已应用Reed Copsey's answer(其本身使用Marcin's approach),但当我意识到该消息明确指出Array2D
arr
属于类型时,仍会收到上述错误消息int [,] option
而非int option [,]
。应用相同的逻辑我的更正代码如下:
let arr = defaultArg optionArr (Array2D.zeroCreate 0 0)
defaultArg
似乎对将Option
值视为“正常”值非常有用。
答案 0 :(得分:3)
Marcin's approach运行正常。这也可以直接使用defaultArg来完成:
// Create our array
let optionArr = Array2D.create 10 10 (Some(1))
let noneToMinusOne x = defaultArg x -1
let result = optionArr |> Array2D.map noneToMinusOne
答案 1 :(得分:2)
let arr optionArr =
optionArr
|> Array2D.map (fun x ->
match x with
| Some(y) -> y
| None -> -1)
使用
let getOptionArr =
Array2D.create 10 10 (Some(1))
let result = arr getOptionArr