我知道如果没有返回任何其他内容,F#函数会返回一个单元,但是此函数返回一个字符串。有人可以帮我理解为什么它会返回一个单位吗?
let rec processList aList str =
match aList with
| h::t -> let x = Regex.Replace(str, h, h, RegexOptions.IgnoreCase)
processList t x
| [] -> printfn "%s" str
答案 0 :(得分:4)
此递归函数的停止案例 | [] - > printfn“%s”str
返回单位,因此该函数返回一个单位。另一个分支只递归调用相同的函数。
答案 1 :(得分:2)
如果我们分析两个递归分支,它们的返回类型必须相同。
第一个分支有一些返回类型'a
,它是processList
的返回值
第二个分支返回unit
,因为它是printfn
的返回类型。你可能想要
| [] -> str
或者对于更复杂的情况,您可以使用sprintf
返回格式化字符串,如下所示
| [] -> sprintfn "%s" str