F#将内部模块视为私有

Mar*_*son 9 .net f# visibility module

任何想法为什么以下不编译?

在最后一行,它告诉我Module1没有定义.如果我从Module1中删除"内部"它工作正常.

我有两个代码文件,Module1.fs在项目中的Module2.fs之上.

Module1.fs

module internal Module1

let sample =
    5 + 4
Run Code Online (Sandbox Code Playgroud)

Module2.fs

module Module2

let sample2 =
    3 + Module1.sample
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 8

您需要为模块提供命名空间,以便internal模块对以后的模块可见.

let module internal MyNamespace.Module1
let module MyNamespace.Module2
Run Code Online (Sandbox Code Playgroud)

  • 对于较大的项目,我建议在结束之前省略辅助功能修饰符,然后添加签名文件来处理它. (4认同)

cit*_*kid 5

编译器错误

尽管这里的答案是解决方法,但此行为仍然是编译器错误。阅读文档和Don Syme的Expert F#,没有一点说只有在还使用命名空间的情况下,内部模块中的类型可以访问。

考虑到编译器发出的代码,我不会很难使内部模块中的类型在程序集中可见。

编辑: 将此行为提交给@fsbugs之后,主人本·唐·赛姆很快就确认这是一个错误。我为这种情况添加了一个工作项:

https://visualfsharp.codeplex.com/workitem/29