错误:值Recusion函数将被评估为F#中其自身定义的一部分

chi*_*rag 2 recursion f# functional-programming function

let rec recFunc=
    let read = stream.Read(buffer, 0, buffer.Length)
    match read with
      | a when a <= 0 -> ms.ToArray()
      | _ -> recFunc  // Called recursion Function
    buffer
Run Code Online (Sandbox Code Playgroud)

我是F#的新手,并且尝试使用递归函数,但是代码显示error The value recFunc will be evaluated as part of its own definition

我指的是MSDN页面,在此页面中,斐波那契函数在函数体内也被再次调用。让我知道可能的解决方案。

Car*_*ten 6

现在它不是一个函数,而是一个值,所以让我们通过添加unit ()作为唯一参数使它成为一个函数;)

let rec recFunc() =
    let read = stream.Read(buffer, 0, buffer.Length)
    match read with
    | a when a <= 0 -> ms.ToArray()
    |_ -> recFunc ()  // Called recursion Function
    buffer
Run Code Online (Sandbox Code Playgroud)

  • 如果您认为`let rec recFunc((x:unit)= ...`),那么您可能会更好地理解它-在F#中,几乎所有地方(甚至在函数参数中)都可以使用模式匹配,因此您可以编写`let rec recFunc((( ):unit)= ...`,但是现在实际上并不需要类型注释`:unit`-`()`总是具有`unit`类型-因此您最终得到缩写形式`let rec recFunc()= ...` (2认同)