每次在Visual Studio 2015的FSharp Interactive中加载FSX脚本文件(或任何其他文件)时,都会打印一条消息:
> #load "D:\Projects\Tests.fsx";;
[Loading D:\Projects\Tests.fsx]
namespace FSI_0055
FSX是否为空并且其中包含一个或多个类型或模块并不重要。结果始终是加载消息(足够清楚),然后是namespace FSI_00XX
消息,其中XX是增量编号。即,如果我再次运行上述命令(对文件进行或不进行更改),则显示:
> #load "D:\Projects\Tests.fsx";;
[Loading D:\Projects\Tests.fsx]
namespace FSI_0056
看起来像是一个错误,但显然不是。我的猜测是,它是一个隐式命名空间,当前命名空间将设置为最新。它是否也意味着我可以使用以前的命名空间引用以前的版本?
或者,如果不是这样,它代表什么?
注意:如果我使用代码段的“发送到交互式”,则此消息会不出现。
答案 0 :(得分:3)
对FSI内部人员有更详细了解的人无疑会给你一个更完整的答案,但是对于它的价值:
检查以下代码:
type Test = T of int
// this is the FSI_XXXX type, you can inspect it for more details.
let fsiType = typeof<Test>.DeclaringType
Microsoft.FSharp.Reflection.FSharpType.IsModule fsiType // returns true
如果您在Visual Studio的FSI窗口中复制/粘贴并运行它,它将返回如下内容:
type Test = | T of int
val fsiType : System.Type = FSI_0026
val it : bool = true