gpt4 book ai didi

F# 变量脱离上下文

转载 作者:行者123 更新时间:2023-12-01 04:34:34 24 4
gpt4 key购买 nike

在下面的虚拟代码中,如果我在最后一行设置断点,变量 x在调试器中无法访问:

the name x does not exist in the current context.


module main = 
let x = 1
printfn "%d" x
1

但是如果我将最后一行更改为 1|>ignore并在那里设置一个断点,我可以看到 x = 1在调试器中。第一种情况下F如何判断 x超出范围?谢谢。

最佳答案

在这种情况下,x value 被编译为 main 的静态字段模块(表示为一个类)。

如果您输入 Foo.main.x,我认为您应该始终能够在 watch 窗口中看到它。 (其中 Foo 是文件的命名空间 - 如果您没有明确提供命名空间,这将由文件名生成,例如 foo.fs 在这种情况下)。

如果添加 ignore 为什么会看到变量?我不完全确定 - 这可能是因为 F# 编译器将断点设置在同一类中的某个位置 x被放置(作为一个字段)。调试器完成的查找遵循 C# (.NET) 规则,因此它查看已编译的代码而不是 F# 源代码(因为 F# 集成不提供自己的解析器)。

通常,如果您在声明局部变量的函数中,您可以假设可以查看局部变量。通常可以使用 this 访问闭包中捕获的变量。 (它为您提供了对闭包对象的引用),但这可能取决于一些编译器内部结构。

关于F# 变量脱离上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050446/

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