【发布时间】:2014-11-15 23:07:36
【问题描述】:
在我的 F# 应用程序中,我经常需要对字符串中的字符串执行不区分大小写的搜索,因此我创建了一个具有适当比较的函数:
let indexOf (str:string) (value:string) startIndex =
match str.IndexOf(value, startIndex, StringComparison.OrdinalIgnoreCase) with
| index when index >= 0 -> Some index
| _ -> None
我不喜欢这样的事实,当我想从头开始搜索时,我必须将多余的 0 作为起始索引传递。
我对 F# 和函数式编程都比较陌生,所以我想知道从函数的角度来看,首选(最干净)的解决方案是什么?
-
创建两个版本:
let indexOfFrom (str:string) (value:string) startIndex = (...) let indexOf str value = indexOfFrom str value 0 -
使用选项类型:
let foundIndex = indexOf "bar foobar" "bar" (Some 4) -
创建一个专用的可区分联合:
type Position = | Beginning | StartIndex of index : int let foundIndex = indexOf "bar foobar" "bar" (Index 4) 将“indexOf”函数放在一个类型中并使用“经典”重载。
将“indexOf”函数放在一个类型中并使用 F# 可选参数。
【问题讨论】: