F#定义/使用同一项目中另一个文件中的类型/模块

时间:2008-10-06 00:12:13

标签: f#

希望这很容易。我有一个带有两个文件(Program.fs,Stack.fs)的F#项目(最新的F#CTP)。在Stack.fs中,我有一个简单的命名空间和类型定义

Stack.fs

namespace Col

type Stack= 
 ...

现在我尝试通过声明

在Program.fs中包含命名空间
open Col

这不起作用,并且给出了错误“未定义名称空间或模块Col”。然而,它是在同一个项目中定义的。我必须遗漏一些明显的东西

5 个答案:

答案 0 :(得分:76)

项目中的文件顺序是什么? Stack.fs需要在Program.fs的Program.fs之前才能“看到”它。

另见

的开头

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!444.entry

的结尾

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!347.entry

答案 1 :(得分:41)

我遇到了同样的问题,你是对的,编译器会考虑文件的顺序。您可以使用与.fs文件关联的上下文菜单中的“上移/下移”项来代替“删除”和“添加”模式。 (Alt-Up和Alt-Down是大多数标准键绑定中的快捷键)

答案 2 :(得分:9)

以上所有都是正确的,但在VS2013中如何做到这一点是另一个问题。我必须在Notepad ++中编辑 .fsproj 文件并设置ItemGroup节点的顺序。在这种情况下,它看起来像这样:

<ItemGroup>
    <Compile Include="Stack.fs" />
    <Compile Include="Program.fs" />
    <None Include="App.config" />
</ItemGroup>

答案 3 :(得分:1)

我遇到了同样的问题,确实是文件的排序。但是,上面的链接没有描述如何在Visual Studio 2008 F#1.9.4.19中修复它。

如果您打开一个模块,请确保您的源文件在解决方案资源管理器中的依赖项之后 。只需右键单击您的源并选择“删除”。然后重新添加它。这将使它出现在列表的底部。希望你没有循环依赖。

答案 4 :(得分:0)

我使用的是Visual Studio for Mac-8.1.4,并且我注意到某些.fs文件未标记为“编译”。您可以通过查看构建输出来查看此内容,并查看所有文件是否都在正确的顺序中。

我不得不手动确保某些文件被标记为“编译”,并且必须手动上下移动它们,直到“占用”。