F#:定义函数的两种方法?
这两个是等效的:F#:定义函数的两种方法?,f#,F#,这两个是等效的: let f(x) = 10 let g = fun(x) -> 10 我想是吧?他们似乎做了同样的事情,但在任何情况下,他们的行为会有所不同吗?我发现第二个版本很有用(即使更详细),因为您可以使用它们是等效的(对“值限制”进行模化,这允许函数(而不是值)是通用的,请参见示例)。正如Brian已经回答的,两者是等效的。返回fun而不是使用let声明函数,如果您想在返回函数之前执行某些操作(即一些初始化),则会有所不同 例如,如果要创建添加随机数的函数,可
let f(x) =
10
let g = fun(x) ->
10
我想是吧?他们似乎做了同样的事情,但在任何情况下,他们的行为会有所不同吗?我发现第二个版本很有用(即使更详细),因为您可以使用
它们是等效的(对“值限制”进行模化,这允许函数(而不是值)是通用的,请参见示例)。正如Brian已经回答的,两者是等效的。返回fun
而不是使用let
声明函数,如果您想在返回函数之前执行某些操作(即一些初始化),则会有所不同
例如,如果要创建添加随机数的函数,可以编写:
let f1 x =
let rnd = new System.Random()
x + rnd.Next()
let f2 =
let rnd = new System.Random()
fun y -> y + rnd.Next()
这里,函数f1
每次执行时都会创建新的Random
实例,但是f2
始终使用相同的rnd
实例(因此f2
是更好的编写方法)。但是如果您立即返回fun
,那么F#编译器将优化代码,并且这两种情况是相同的。F