F#的“Hello,world”,包含2个fs文件

时间:2012-04-16 20:20:52

标签: f#

我来自C#背景到F#。到目前为止,我编写了简单的程序,并在F#interactive中花了很多时间。

我很难创建一个带有两个.fs文件的VS F#项目。

示例代码:

// part 1: functions
let rec gcd (a : uint64) (b : uint64) =
    if b = 0UL then a
    else gcd b (a % b)

// part 2: main()
let a, b = (13UL, 15UL)
do printfn "gcd of %d %d = %d" a b (gcd a b)

我想要两个.fs文件,即Alg.fs和Program.fs,这样Program.fs将包含我正在使用的代码和具有算法的Alg.fs。

采取步骤:
我已经创建了两个文件。编译器发出错误:Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'

我已插入module Programmodule Alg。编译程序只执行Alg.fs中完全忽略Program.fs ...

的代码

我在Visual Studio 2010中使用F#2.0 附:我用Google搜索并检查了some posts,并在modules上阅读了文档,并在询问之前查看了相对questions

2 个答案:

答案 0 :(得分:22)

听起来这是一个项目中的文件订单问题。最后一个文件是入口点(“主要方法”),听起来像你最后有Alg.fs,你最后需要Program.fs。您可以通过VS Solution Explorer中的右键单击上下文菜单重新排序它们。

答案 1 :(得分:5)

这里至少需要看三件事:

  1. 如@Brian所述,源控制文件的顺序也是编译顺序。这在F#中很重要,其中大量使用类型推断。确保Alg.fs位于Visual Studio文件列表中的Program.fs之前(尝试此操作:选择Program.fs并点击Alt+Down Arrow,直到它位于底部)。

  2. 由于Alg.fsProgram.fs现在位于模块中,您需要实际打开Alg中的Program模块才能访问其绑定({{ 1}}),或在open Alg上添加[<AutoOpen>]属性。

  3. 正如@Daniel所说,最后一个问题可能是程序入口点的定义。您需要顶级绑定上的Alg属性,该属性也是最后一个文件中的最后一个函数。或者,这默认为最后一个文件中的最后一个绑定,只需确保它具有正确的签名(参见Daniel的链接)。