为什么以下内容无法编译?
在最后一行,它告诉我Module1未定义。如果我从Module1中删除“内部”,它可以正常工作。
我有两个代码文件,Module1.fs在项目中的Module2.fs之上。
Module1.fs
module internal Module1
let sample =
5 + 4
Module2.fs
module Module2
let sample2 =
3 + Module1.sample
答案 0 :(得分:7)
您需要为模块命名,以便internal
模块对以后的模块可见。
let module internal MyNamespace.Module1
let module MyNamespace.Module2
答案 1 :(得分:4)
编译器错误
虽然这里的答案是解决方法,但这种行为仍然是编译器错误。阅读文档和Don Syme的专家F#,毫无疑问只有在您使用namepsaces 时才能访问内部模块中的类型。
考虑到编译器发出的代码,我不会觉得在内部模块中的类型在程序集内部可见是很困难的。
修改强> 将此行为提交给@fsbugs后,主人本人Don Syme很快证实这是一个错误。我为这个案例添加了一个工作项目:
答案 2 :(得分:2)
这应该是命名空间问题。 只需在两个文件(相同的名称空间!)之上添加名称空间定义,如下所示:
namespace MyNamespace
module internal Module1 =
let sample = 5+4
和
namespace MyNamespace
module Module2 =
let sample2 = 3 + Module1.sample