如何识别重新定义的变量或阴影变量

Guy*_*der 7 f# shadowing

在F#编译器的同一范围内使用相同的变量两次时,没有警告或反馈.例如

let s = "abc"
let s = "def"
printfn "%A" s
Run Code Online (Sandbox Code Playgroud)

结果是

def
Run Code Online (Sandbox Code Playgroud)

我已经看到
有没有办法在Visual Studio中对F#中的值进行阴影警告?
F#值阴影 - 是否可以在同一范围内禁用值阴影

有没有办法通过编译器警告或在编辑器中可视化获得有关阴影变量的反馈.如何才能做到这一点?

Guy*_*der 9

首先,同一范围内变量的阴影不是错误或应禁用的内容.正如Joel Mueller所说的那样legitimate, useful, and common.

每个MSDN

在模块范围以外的任何范围级别,重用值或函数名称都不是错误.如果重用名称,稍后声明的名称将隐藏先前声明的名称.


Visual Studio扩展F#Power Tools语法着色功能将突出显示当前有效变量,并将阴影变量显示为浅灰色.例如

在此输入图像描述

可以从Visual Studio菜单安装扩展

工具 - >扩展和更新
对话框打开后
选择Visual Studio库
在右上角的搜索框中输入F#Power Tools
由于我已经安装了它,因此未显示安装选项.

在此输入图像描述

可以从Visual Studio菜单激活该功能

工具 - >选项 - > F#电动工具 - >常规 - >语法着色 - >灰显未使用的声明

在此输入图像描述

选项关闭:

在此输入图像描述

选项:

在此输入图像描述

注意:更改选项后,必须关闭源文件,然后重新打开以使更改生效.Visual Studio不需要为此重新启动,但这样做会产生相同的效果.

感谢Ringil注意到我早先的无效陈述.

源代码注意事项:

使未使用的声明变灰


当前未使用的非公共类型,方法,函数和值声明被检查.请注意,当代码没有类型错误时,此功能仅100%可靠.常规选项中提供此设置.默认情况下禁用它,因为大文件可能存在性能问题.

F#Power Tools功能列表

  • 颜色编码是一个比警告更好的选择.当我做一些合法,有用和普通的事情时,我不想被警告. (2认同)