为什么 F# 会出现模块名称部分重叠的问题?

Gru*_*uez 5 f#

这个问题总是让我困惑,我无法理解 F# 编译器在这里遇到的问题。

我有两个模块的两个文件。

A.fs:

module A
//rest of the module goes here
Run Code Online (Sandbox Code Playgroud)

B.fs

module A.B
//rest of the module goes here
Run Code Online (Sandbox Code Playgroud)

当我构建这个项目时,我得到: A.fs(1, 8): [FS0247] A namespace and a module named 'A' both occur in two parts of this assembly

为什么?除了 Program.fs 之外,项目中没有其他任何内容。我是否错误地假设我可以将模块分解为多个文件以控制一切,同时使用命名空间之类的命名方案?(显然编译器是这么认为的)。

我想了解编译器在这里遇到的问题以及为什么我会出现引用命名空间的错误,即使我的代码中没有命名空间声明。

Gru*_*uez 9

这是这个问题的答案,以防万一有人遇到同样的错误并在这里谷歌搜索。

模块文档中的这段内容解释了发生了什么:

在顶级模块声明的语法中,可选的限定命名空间是包含该模块的嵌套命名空间名称的序列。

通过声明一个模块,A.B我实际上是根据上面的描述B在命名空间中声明一个模块。A因此,我最终得到了一个名为Adue to 的 模块 module A和一个命名空间Adue tomodule A.B的结果,编译器告诉我,我现在A在该程序集中同时拥有一个名为 due 的模块和一个命名空间。

如果我错了,我会更改这个答案或不接受它。