在我的 F# 应用程序中,我经常需要对字符串执行不区分大小写的搜索,因此我创建了一个具有适当比较的函数:
在我的 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
使用 Option 类型:
let foundIndex = indexOf "bar foobar" "bar" (Some 4)
创建一个专门的联合类型:
type Position = | Beginning | StartIndex of index : int let foundIndex = indexOf "bar foobar" "bar" (Index 4)
将“indexOf”函数置于类型中,并使用“classic”重载技术。
将“indexOf”函数置于类型中,并使用F#可选参数。