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

Jar*_*Par 69 f#

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

Stack.fs

namespace Col

type Stack= 
 ...
Run Code Online (Sandbox Code Playgroud)

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

open Col
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ian 79

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


Hor*_*ez. 41

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


Ben*_*ers 9

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

<ItemGroup>
    <Compile Include="Stack.fs" />
    <Compile Include="Program.fs" />
    <None Include="App.config" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

  • 刚刚在 VS2015 中发生这种情况 - 向上或向下移动文件并不能解决问题 - 必须手动编辑 .fsproj 文件。- F# PowerTools 中可能存在的错误 (2认同)