F# 在F中存储对局部变量的引用#
因此,函数式编程对我来说还是一个新概念,我正在努力掌握避免持有(或者更确切地说是变异)“状态”的思想。我想我把这个概念和let界变量混淆了。在某些情况下,我需要将一个函数的结果传递给多个其他函数。例如,在下面的代码中F# 在F中存储对局部变量的引用#,f#,F#,因此,函数式编程对我来说还是一个新概念,我正在努力掌握避免持有(或者更确切地说是变异)“状态”的思想。我想我把这个概念和let界变量混淆了。在某些情况下,我需要将一个函数的结果传递给多个其他函数。例如,在下面的代码中 让doSomething a b f g=((a |>b |>f),(a |>b |>g)) 值b(a)不必要地计算了两次。我想做的是 let result = b a ((f result), (g result)) 然而,我觉得这在某种程度上违反了函数式编程的
让doSomething a b f g=((a |>b |>f),(a |>b |>g))
值b(a)
不必要地计算了两次。我想做的是
let result = b a
((f result), (g result))
然而,我觉得这在某种程度上违反了函数式编程的惯例?以这种方式使用let绑定变量是否算作保持状态?另一种选择是
match a |> b with
| result -> ((f result), (g result))
但这感觉基本上和以前一样。我想知道这个问题是否是由于我的函数式编程方法中的一个缺陷造成的,也许这些问题从一开始就没有出现过?或者,既然let-bound变量是不可变的,那么以前一种方式使用它们是完全可以的,而我完全过度思考了?如果这有点模糊,请道歉。您可以使用lambda表达式避免let绑定
let doSomething a b f g = b a |> (fun x -> f x, g x)