首页 文章

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

提问于
浏览
65

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

Stack.fs

namespace Col

type Stack= 
 ...

现在我尝试通过声明在Program.fs中包含命名空间

open Col

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

4 回答

  • 41

    项目中的文件顺序是什么? 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

  • 75

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

  • 1

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

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

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

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

相关问题