有没有办法在Visual Studio中对F#中的值进行阴影警告?

Gos*_*win 7 f# shadowing visual-studio

对我来说,隐藏现有的值,如:

阴影和嵌套函数
在F#
f中不可变#重复定义
FSharp,用于娱乐和利润评论

似乎违背了不变性和类型安全的概念,这使得F#如此强大.F#中的阴影效果 C#中的不同.我花了很长时间才发现我的代码中的一个错误是由于在同一范围内无意中隐藏了一个名称.有没有办法让VS中的阴影值有编译器警告?

我知道在某些情况下它可能很有用.例如,Checked Aritmetics.

Joe*_*ler 5

我使用阴影的一个地方是,如果未提供任何值,则将可选参数解析为默认值。

member x.Foo(?myFlag: bool) =
    let myFlag = defaultArg myFlag false
    ...
Run Code Online (Sandbox Code Playgroud)

如果我们没有阴影,那么现在实现的F#Interactive几乎完全无法运行。


Ste*_*sen 3

阴影有优点也有缺点。我也遇到过由于粗心的阴影工作而出现的错误。从好的方面来说,正如 @JoelMueller 指出的那样,它可以帮助保持变量空间干净。

隐藏错误与可变变量错误有着根本的不同。它们属于错字品种。它们更容易分析:词典编目上下文与环境上下文的历史信息丢失被最小化。也就是说,通过阴影,您始终可以通过心理堆栈展开清晰地跟踪绑定的值,而变量突变则创建本质上的 goto(跳转到地址)。

实际上,阴影仍然可以消除所有类别的错误。你不会遇到任何“来自远处的幽灵行动”。也就是说,您不会遇到闭包中捕获的变量或在相对于当前作用域的嵌套作用域中修改变量的问题。