F# Array.FindIndex 异常处理
F# Array.FindIndex exception handling
我有以下函数可以在数组中找到索引
let numbers_array = [| "1"; "2"; "3"|]
let findIndex arr elem = arr |> Array.findIndex ((=) elem)
let s = "123"
findIndex numbers_array (string s.[0]))
但是如果我尝试 运行
findIndex numbers_array (string s.[10]))
它越界并抛出以下错误
System.Collections.Generic.KeyNotFoundException: 在集合中找不到满足谓词的索引。
我怎样才能使我的函数不抛出异常而是像 printf 语句那样执行某些操作?
我认为这很接近你想要的:
let findIndex arr elem =
match arr |> Array.tryFindIndex ((=) elem) with
| Some index -> index
| None ->
printfn "Not found"
-1
它保持与您现在拥有的相同的函数签名,并在未找到该元素时生成一条错误消息作为副作用。 (请注意,在这种情况下,该函数仍然必须 return 和 int
,所以我选择了 -1。)
我有以下函数可以在数组中找到索引
let numbers_array = [| "1"; "2"; "3"|]
let findIndex arr elem = arr |> Array.findIndex ((=) elem)
let s = "123"
findIndex numbers_array (string s.[0]))
但是如果我尝试 运行
findIndex numbers_array (string s.[10]))
它越界并抛出以下错误
System.Collections.Generic.KeyNotFoundException: 在集合中找不到满足谓词的索引。
我怎样才能使我的函数不抛出异常而是像 printf 语句那样执行某些操作?
我认为这很接近你想要的:
let findIndex arr elem =
match arr |> Array.tryFindIndex ((=) elem) with
| Some index -> index
| None ->
printfn "Not found"
-1
它保持与您现在拥有的相同的函数签名,并在未找到该元素时生成一条错误消息作为副作用。 (请注意,在这种情况下,该函数仍然必须 return 和 int
,所以我选择了 -1。)