1 | k when k > 0 -> k * (fa-6ren">
gpt4 book ai didi

f# - 记录类型递归成员函数和 "rec"关键字

转载 作者:行者123 更新时间:2023-12-03 10:39:39 26 4
gpt4 key购买 nike

我一直认为在 F# 中我们需要使用 rec每个递归函数的关键字,例如:

let rec factorial = function
| 0 -> 1
| k when k > 0 -> k * (factorial (k - 1))
| failwith "oops!"

今天我在玩 F#,我想出了一个类似于以下的代码:
let MyRecordType =
{ Something : float;
SomethingElse : int }
with
static member factorial = function
| 0 -> 1
| k when k > 0 -> k * (MyRecordType.factorial (k - 1))
| failwith "oops!"

如您所见,我刚刚定义了一个递归函数,但起初我犯了一个错误:我忘记通过 rec 将函数声明为递归函数。关键词。

但令我惊讶的是 编译 !还有更多:如果您添加 rec关键字,则为语法错误!
type MyRecordType =
{ (* ... *) }
with
// syntax error:
static member rec factorial = function
(* ... *)

我用谷歌搜索了一个解释,但什么也没得到。在 MSDN 文档中,我找不到对 rec 的任何提及。关键字外 the page about recursive functions ,截至 2010 年 1 月 3 日,它没有提到我要问的情况。

完全相同的事情发生在非静态成员身上。

所以, 为什么使用 rec 是语法错误记录类型成员函数的关键字 ?

最佳答案

所有“成员”函数在它们定义的类型中都是隐含的“rec”。

关于f# - 记录类型递归成员函数和 "rec"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com