为什么这个公式会返回一个单位?

时间:2013-07-15 23:26:03

标签: f# unit-type

我知道如果没有返回任何其他内容,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

2 个答案:

答案 0 :(得分:4)

此递归函数的停止案例 | [] - > printfn“%s”str

返回单位,因此该函数返回一个单位。另一个分支只递归调用相同的函数。

答案 1 :(得分:2)

如果我们分析两个递归分支,它们的返回类型必须相同。

第一个分支有一些返回类型'a,它是processList的返回值

第二个分支返回unit,因为它是printfn的返回类型。你可能想要

| [] -> str

或者对于更复杂的情况,您可以使用sprintf返回格式化字符串,如下所示

| [] -> sprintfn "%s" str