在 a.fsx 中:
namespace na
module ma =
let var = 2
在 b.fsx 中:
#load "a.fsx"
namespace nb
module mb =
let var = na.ma.var
在 c.fsx 中:
#load "a.fsx"
namespace nc
module mc =
let var = na.ma.var
在 userdep.fsx 中:
#load "b.fsx"
#load "c.fsx"
在 user.fsx 中:
#load "userdep.fsx"
现在,如果我将 user.fsx 中的最后一条指令发送到 FSI,我会得到:
>
[Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\b.fsx
Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\a.fsx
Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\c.fsx
Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\userdep.fsx]
b.fsx(6,15): error FS0039: The namespace or module 'na' is not defined
>
如果决定的加载顺序是显示的顺序,这是有道理的。如果我从 userdep.fsx 发送 2 行,那么我必须在不同的命名空间中引用 a:
>
[Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\a.fsx
Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\b.fsx]
namespace FSI_0002.na
val var : int
namespace FSI_0002.nb
val var : int
[Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\a.fsx
Loading \\psf\home\Documents\Visual Studio 11\Projects\Library3\Library3\c.fsx]
namespace FSI_0003.na
val var : int
namespace FSI_0003.nc
val var : int
>
是否有任何原则可以规避您所知道的这种行为?