哪一种是f#中更好的函数定义风格?


let rec ints = function n -> Link (n+1, ints) 
let rec ints2 n = Link (n+1 ,ints)

哪一种是更好的风格,为什么?

第二个,因为它更短。第一个是图案match的简写,不能给你买任何东西。

更详细一点,第一个等价于

let rec ints n = 
  match n with
  | n -> Link (n+1, ints) 

这是无效的,因为它只是将参数n绑定到一个遮蔽变量n

正如Stephen所说,第一个是低效的。

如果您确实需要,您可以使用fun关键字:

let rec ints3 = fun n -> Link (n+1, ints)

ints2和ints3在内部表示中几乎相同。我看不出总是使用这种语法有什么意义,因为它只是比ints2长,没有任何优势。

澄清:

一般情况下,您应该使用fun关键字,但在更合适的情况下。

最新更新