我具有此功能,用于检查字符串中某个模式的出现次数。问题是无论输入如何,始终返回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
答案 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