我是F#初学者。我运行了这段代码:
let printMsg() =
let msg = "Important"
printfn "%s" msg
let innerMsgChange() =
let msg = "Very Important"
printfn "%s" msg
printfn "%s" msg
innerMsgChange()
printfn "%s" msg
printMsg()
我希望文本输出符合以下顺序:
重要,非常重要,重要,重要
或者
重要,非常重要,非常重要,重要
但我得到了这个
重要,重要,非常重要,重要
似乎这些功能不符合代码执行顺序。为什么,我错过了什么?
答案 0 :(得分:8)
首先,重要的是指出innerMsgChange
没有做它的名字所承诺的:它创建一个名为msg
的新变量(它与外部变量完全无关,也被称为{ {1}})使用值“非常重要”然后打印它。所以本质上它打印字符串“非常重要”,就是这样。
那么执行代码的顺序是什么?简单:
msg
设置为“重要”msg
函数已定义,但未调用(这不是实际执行的步骤,因此基本上没有任何事情发生在此行上)innerMsgChange
msg
被称为
5.1。内部变量innerMsgChange()
设置为“非常重要”。我们将其称为msg
来解除歧视。
5.2。 <{1}}已打印。
innerMsg
(仍然具有“重要”值,因为它与innerMsg
完全无关)会再次打印。
答案 1 :(得分:1)
输出符合预期
1)重要 - &gt; printfn“%s”msg(第3行)
然后你定义函数,而不是调用它。
2)重要 - &gt; printfn“%s”msg(第7行)
现在,你打电话给它。
3)非常重要 - &gt; printfn“%s”msg(函数innerMsgChange内的第6行)
4)重要 - &gt; printfn“%s”msg(第9行)