我想了解阴影和嵌套函数的机制是如何工作的.例如:
let func y =
let dup y = y + y
let z = dup y
let dup y =
let dup z =
let y = y * z
y
let z = y
y
dup z + z;;
val func : int -> int
> func 3;;
val it : int = 12
Run Code Online (Sandbox Code Playgroud)
有人可以解释这里发生了什么吗
请考虑以下记录定义:
type A = { F1 : int; F2 : int }
type B = { F1 : int; F3 : int }
// error FS0656: This record contains fields from inconsistent types
let a1 = { F1 = 1; F2 = 2 }
// this works
let a2 = { A.F1 = 1; F2 = 2 }
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么a1会导致错误.
我可以找到为什么你必须这样做的所有例子a2-way假设A和B中的所有字段名都有相同的名字 - 这当然是模棱两可的,但是当A和B不应该有区别时至少有一个不同的领域?
也许这只是F#对此进行评估的方式,将类型名称添加到第一个字段当然没什么大不了的,但我只是好奇.
编辑:感谢您的回答,这让我发现了一些相当奇怪的事情:当我第一次评估它时(ALT +在VS 2010中输入),整个片段都有效.
当我第二次尝试评估时,我收到错误.
如果没有人可以重现这个我的VS安装很可能...
EDIT2(好吧,在这里创建一个帐户的时间,对不起编辑)感谢wmeyer(以及其他所有人)花时间看问题并让我意识到我对FSI如何工作的误解.一切都清理了!