为什么我的所有函数都在运行,即使我只在一个模块中调用一个函数?

时间:2013-05-18 03:22:19

标签: f#

我在Test.fs文件中有以下代码:

namespace Testing

module test1 =
    let Run =
        printfn "Test1"

module test2 =
    let Run =
        printfn "Test2"

在我的Program.fs我打电话:

[<EntryPoint>]
let main argv = 
    let sw = Stopwatch.StartNew()

    printfn "%A" Testing.test1.Run

    sw.Stop()
    printfn "Problem took %d minutes, %d seconds, and %d milliseconds" sw.Elapsed.Minutes sw.Elapsed.Seconds sw.Elapsed.Milliseconds

    let s = Console.ReadLine()
    0 // return an integer exit code

此输出

  

测试1

     

的Test2

     

为什么Test2正在输出,即使我只是在调用Test1.Run

1 个答案:

答案 0 :(得分:5)

test1.Run不是函数,它是一个值。打开模块时,执行该模块中的所有顶级代码。在这种情况下,您定义的是test1.Runtest2.Run,它们都是绑定而不是函数。

我无法确切地说明您发布的内容究竟发生了什么,但很明显您的主要功能未被调用,否则printfn "%A" Testing.test1.Run会打印<null>printfn "Problem took %d minutes, %d seconds, and %d milliseconds" sw.Elapsed.Minutes sw.Elapsed.Seconds sw.Elapsed.Milliseconds会打印出来还有一些东西。