为什么使用IndexOf的此函数总是返回0?

时间:2018-12-04 18:15:24

标签: f#

我具有此功能,用于检查字符串中某个模式的出现次数。问题是无论输入如何,始终返回0。最令人沮丧的是,它在2分钟前有效,我没有进行任何更改。

let Counter (text : string) (pattern : string) =
    let mutable count = 0
    let mutable i = 0
    while ((i = text.IndexOf(pattern, i)) <> false) do
        i <- i + pattern.Length
        count <- count + 1
    count

1 个答案:

答案 0 :(得分:1)

主要问题是,您似乎在尝试在i循环中的测试中为while分配一个新值,但是=运算符测试相等性并执行不执行分配。 <-赋值运算符的返回类型为unit(它不返回赋值),因此解决方法不像将对=的调用替换为对{ {1}}。

最直接的解决方法可能是将测试分解为一个单独的内部函数:

<-

但是,请注意,这不是惯用的F#代码。相反,我会这样写:

let counter (text : string) (pattern : string) =
    let mutable i = 0
    let moveNext() =
        i <- text.IndexOf(pattern, i)
        i
    let mutable count = 0
    while (moveNext() >= 0) do
        i <- i + pattern.Length
        count <- count + 1
    count
相关问题