我是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()
Run Code Online (Sandbox Code Playgroud)
我期望文本输出将按以下顺序排列:
重要,非常重要,重要,重要
或这个
重要,非常重要,非常重要,重要
但我得到了这个
重要,重要,非常重要,重要
似乎这些函数不符合代码执行顺序.为什么,我错过了什么?
首先,重要的是要指出innerMsgChange它没有做它的名字所承诺的:它创建一个名为msg(它也被称为外部变量完全无关)的新变量msg,其值为"Very Important",然后打印它.所以本质上它打印字符串"非常重要",就是这样.
那么执行的代码是哪个顺序?简单:
msg设置为"重要"innerMsgChange函数已定义,但未调用(这不是实际执行的步骤,因此基本上没有任何事情发生在此行上)msg再次打印innerMsgChange() 叫做
5.1.内部变量msg设置为"非常重要".让我们把它称为innerMsg消除歧视.
5.2.innerMsg打印出来.
msg(它仍然具有"重要"的值,因为它完全不相关innerMsg)再次打印.