F# 在同一项目的另一个文件中定义/使用类型/模块
Posted
技术标签:
【中文标题】F# 在同一项目的另一个文件中定义/使用类型/模块【英文标题】:F# defining/using a type/module in another file in the same project 【发布时间】:2010-09-15 10:22:17 【问题描述】:希望这将是一件容易的事。我有一个带有两个文件(Program.fs、Stack.fs)的 F# 项目(最新的 F# CTP)。在 Stack.fs 我有一个简单的命名空间和类型定义
堆栈.fs
namespace Col
type Stack=
...
现在我尝试通过声明将命名空间包含在 Program.fs 中
open Col
这不起作用并给我错误“未定义命名空间或模块 Col”。然而它是在同一个项目中定义的。我必须遗漏一些明显的东西
【问题讨论】:
提示:如果您需要在 Visual Studio 中更改文件的顺序,请安装 F# PowerTools,并在解决方案资源管理器中使用Alt+Arrow
移动它们(或右键单击) .您还可以将它们移动到其他文件夹,或创建新文件夹等。
【参考方案1】:
项目中文件的顺序是什么? 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
【讨论】:
完美!为满足评论限制添加了额外字符。 这个也引起了我的注意,我原以为 F# 编译器可以快速检查所有其他文件并查找丢失的模块...看起来很简单 "项目中文件的顺序是什么?"这是什么意思?所有文件都在同一个文件夹中。 文件在 .fsproj 文件中列出的顺序很重要。 Visual Studio 解决方案资源管理器应以相同的顺序列出它们,并提供上下文菜单命令以将它们向上或向下移动。【参考方案2】:我有同样的问题,你是对的,编译器会考虑文件的顺序。您可以使用与 .fs 文件关联的上下文菜单中的上移/下移项目,而不是删除和添加模式。 (Alt-Up 和 Alt-Down 是大多数标准键绑定中的快捷键)
【讨论】:
我相信这些键绑定仅在安装了 F# PowerTools 时可用(但大多数 F# 用户还是安装了它们)。【参考方案3】:以上都是正确的,但是如何在VS2013中做到这一点是另一个问题。我必须手动编辑我的 .fsproj 文件,并在 ItemGroup 节点中按确切顺序设置文件。在这种情况下,它看起来像这样:
<ItemGroup>
<Compile Include="Stack.fs" />
<Compile Include="Program.fs" />
<None Include="App.config" />
</ItemGroup>
【讨论】:
或者您可以简单地安装F# PowerTools,它允许您向上或向下移动文件、将它们移动到目录或移出目录等等。将为您节省大量时间。 刚刚在 VS2015 中发生过这种情况 - 向上或向下移动文件并不能解决问题 - 必须手动编辑 .fsproj 文件。 - F# PowerTools 中可能存在的错误 @jps,是的,我也注意到 PowerTools 的一些错误,尤其是。向上/向下移动目录时(它们在 fsproj 中位于底部,但在 VS 中显得更高)。在一个目录中移动通常是正确的(对我来说)。幸运的是,您现在可以直接在 VS2015 中编辑 fsproj。【参考方案4】:我有同样的问题,确实是文件的顺序。但是,上面的链接没有描述如何在 Visual Studio 2008 F# 1.9.4.19 中修复它。
如果您打开一个模块,请确保您的源文件位于解决方案资源管理器中的依赖项之后。只需右键单击您的源并选择删除。然后重新添加它。这将使它出现在列表的底部。希望你没有循环依赖。
【讨论】:
我是 F# 新手。如果我确实有循环依赖怎么办?这根本不可能吗? @MEMark 在您确实需要此类类型时使用“and”关键字。【参考方案5】:我正在使用 Visual Studio for Mac - 8.1.4,我注意到一些 .fs 文件未标记为“编译”。您可以通过查看构建输出来查看这一点,并查看您的所有文件是否都在那里并且顺序正确。
我不得不手动确保某些文件被标记为“编译”,并且不得不手动上下移动它们直到它“占用”。
【讨论】:
以上是关于F# 在同一项目的另一个文件中定义/使用类型/模块的主要内容,如果未能解决你的问题,请参考以下文章