let a = 1
let a = 2
let b = a
Run Code Online (Sandbox Code Playgroud)
这段代码安静地编译、运行和绑定 b = 2。
但这是理想的行为吗?它确实允许编码器重用适当的值名称,没有对象被改变,但是在n行代码中间很容易在同一名称空间中意外再次使用值名称,并且实际上引入了错误通过突变。我想知道这如何符合功能范式,以及是否应该有各种警告。
您并不完全正确,因为这只能在本地进行。
这种行为称为阴影。阴影是一种非常有效的方法,可以使代码更具可读性,而不是像您在使用命令式语言时可能认为的那样难以理解。它实际上可以通过覆盖标识符名称来帮助防止错误而不是引入错误,从而阻止访问以前的定义。
下面是一个示例,显示了阴影的典型用法,其中使用的类型是 Insect 选项、Insect 和 UnclassifiedInsect。
match insect with
| Some insect ->
match insect with
| Butterfly butterfly -> printfn "It's a butterfly."
| UnclassifiedInsect insect -> printfn "New species? %A." insect
| None -> printfn "There was no insect."
Run Code Online (Sandbox Code Playgroud)
PS:F# 也有命令式结构,所以有可能搞砸,例如混合阴影和可变变量。不要那样做。但总的来说,阴影是一种祝福。
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |