F#编译器有时会使用Duplicate definition of value foo
形式的编译时错误拒绝我的代码,该错误指向这样的定义:
let foo = ref 0
即使这不是重复的定义,因为整个文件中没有foo
的其他定义。为什么会这样?
答案 0 :(得分:8)
当您还定义get_foo
函数时会发生这种情况:
let get_foo() = !foo
因为foo
的定义创建了一个实现自己的get_foo
方法的属性,所以存在冲突。 F#编译器对此感到困惑,并生成伪造的“重复定义错误”。
此错误已报告给Microsoft,他们正在修复但它不会进入F#的下一个(VS11)版本。