【发布时间】:2021-11-15 22:39:48
【问题描述】:
我正在关注 F# 书籍 Get Programming with F# 并进入了关于阴影的部分。他们提供的最简单的例子似乎是不可能的,所以我想知道是否为 F# 6 阴影删除或更改了此语法?我还没有找到任何说明或如何做这本书提供的影子记录的任何内容。
type Address =
{ Street: string
Town: string
City: string }
let home = { Street = "123 Main Street"; Town = "The Town"; City = "The City" }
let home = { home with City = "Second City" }
let home = { home with City = "Third City" }
尝试构建时出现错误:Duplicate definition of value 'home'
编辑
所以在搜索了为什么这不起作用的答案但没有成功后,我尝试将上述内容放入这样的函数中:
let testFunction =
let home = { Street = "123 Main Street"; Town = "The Town"; City = "The City" }
let home = { home with City = "Second City" }
let home = { home with City = "Third City" }
0
它工作得很好。所以我现在的问题是为什么阴影在函数内部起作用而不在外部起作用?是否存在与不在函数范围内发生的模块级别的范围冲突?
【问题讨论】:
-
模块中的顶级定义那样没有意义。我的意思是,你为什么要这样做,目标是什么?不过它确实可以在脚本中工作。
-
补充一点,它在脚本中工作的原因是它在检查脚本完成方面存在细微差别。正如您可能想象的那样,在脚本/回复中使用一堆顶级值进行迭代,这些值的定义会随着您的实验而改变,这是一个重要的场景。但对于实际程序中的顶级值而言,情况并非如此。
-
@FyodorSoikin 原因是我正在学习 F#,所以我想运行本书中的一个示例,到目前为止,它一直在 Program.fs 中,而不是更正确地分离出来。