Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#:定义函数的两种方法?_F# - Fatal编程技术网

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