gpt4 book ai didi

F# 代码执行顺序

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

另一个关于 F# 的菜鸟问题。

如果我有以下代码...

let ExeC =
printfn "c"
3

let ExeB b =
printfn "b"
2

let ExeA =
printfn "a"
1

printfn "Example %d " ExeA
printfn "Example %d " (ExeB 1)
printfn "Example %d " ExeC

输出如下...

c
a
Example 1
b
Example 2
Example 3

这里看起来不寻常的是代码执行的顺序。在上一个问题中,Brian 提到了一些关于表达式的内容,我希望有人能对此进行更多解释。看起来编译器似乎正在智能地预先执行一些东西来计算值......但我不知道?

最佳答案

ExeAExeC不是函数,而是单个值。编译器确保值按照它们在源文件中声明的顺序初始化,所以这里发生的是:

  1. ExeC初始化
  2. ExeA初始化
  3. Example 1打印,使用 ExeA的初始值
  4. ExeB函数被正常调用
  5. Example 3打印,使用 ExeC的初始值

如果你想要ExeAExeC真正的懒惰——也就是说,控制它们的副作用运行的时间——你可以将它们变成接受 unit 的函数。 :

let ExeC () =
printfn "c"
3

let ExeB b =
printfn "b"
2

let ExeA () =
printfn "a"
1

printfn "Example %d " (ExeA ())
printfn "Example %d " (ExeB 1)
printfn "Example %d " (ExeC ())

关于F# 代码执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170951/

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