【问题标题】:Why does this formula return a unit?为什么这个公式返回一个单位?
【发布时间】:2013-07-15 23:26:03
【问题描述】:

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

【问题讨论】:

    标签: f# unit-type


    【解决方案1】:

    这个递归函数的停止情况 | [] -> printfn "%s" str

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

    【讨论】:

      【解决方案2】:

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

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

      第二个分支返回unit,因为这是printfn的返回类型。你可能只想拥有

      | [] -> str
      

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

      | [] -> sprintfn "%s" str
      

      【讨论】:

        猜你喜欢
        • 2012-02-13
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多