【发布时间】:2021-01-24 18:33:13
【问题描述】:
我有以下函数可以在数组中找到索引
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 语句的操作?
【问题讨论】:
-
我相信有一个tryFindIndex。
-
tryFindIndex 返回一个我不能使用的选项类型
-
为什么不能使用选项?您可以捕获
KeyNotFoundException,但您仍然必须决定在错误情况下返回什么。 -
该问题包含应更正的错误。源代码不可编译。它也没有以斜体显示错误。提到的越界错误发生在函数的参数中,因此不相关。
-
tryFindIndex绝对是正确的选择。如果您不想更改函数的签名,可以printf以防tryFindIndex返回None,然后返回-1。 (有关基于此的建议答案,请参见下文。)
标签: arrays sorting exception collections f#