.net core F#在表达式末尾不返回

.net core F#在表达式末尾不返回,.net-core,f#,.net Core,F#,我有一个问题,F#程序没有在一个表达式的末尾返回,而是执行它下面的下一个表达式 文件中显示的两个表达式: let startCycle = printfn "startCycle" (0, "") let blah = printfn "blah" (0, "") 当调用startCycle时,它会将这两条消息打印到控制台。使用调试器逐步执行此操作,它从第一个(0,“”)转到printfn“blah”,并在点击

我有一个问题,F#程序没有在一个表达式的末尾返回,而是执行它下面的下一个表达式

文件中显示的两个表达式:

   let startCycle = 
        printfn "startCycle"
        (0, "")


   let blah = 
        printfn "blah"
        (0, "")
当调用
startCycle
时,它会将这两条消息打印到控制台。使用调试器逐步执行此操作,它从第一个
(0,“”)
转到
printfn“blah”
,并在点击第二个
(0,”)
时返回。我已经多次检查了间距,VisualStudio似乎将其识别为两个独立的表达式

另一件奇怪的事情是,如果我多次调用
startCycle
,它只在第一次调用时打印,之后的每次调用都不会打印到控制台,除非我停止并重新启动应用程序。我正在使用F#4.7和.NETCore3。我错过了什么

编辑: 如果有帮助,以下是如何调用
startCycle

    let Run (cmdline: string) : (int * string) =
        let cmodel = parseCmd cmdline
        printfn "%A" cmodel
        match cmodel.Command with
        | "sendMsg4" -> Commands.sendMsg4 cmodel.Args
        | "sendMsg7" -> Commands.sendMsg7 cmodel.Args
        | "sendMsg8" -> Commands.sendMsg8 cmodel.Args
        | "sendMsg10" -> Commands.sendMsg10 cmodel.Args
        | "sendMsg16" -> Commands.sendMsg16 cmodel.Args
        | "sendMsg19" -> Commands.sendMsg19 cmodel.Args
        | "sendMsg22" -> Commands.sendMsg22 cmodel.Args
        | "sendMsg29" -> Commands.sendMsg29 cmodel.Args
        | "sendMixMessages1929" -> Commands.sendMixMessages1929
        | "help" | "Help" -> Commands.help cmodel.Args
        | "startCycle" -> Commands.startCycle
        | "stopCycle" -> Commands.stopCycle
        | "cycleStatus" -> Commands.cycleStatus
        | "set" -> Commands.setStateValue cmodel.Args
        | "show" -> Commands.show cmodel.Args
        | "" -> (1, "")
        | _ -> (-1, "Unknown Command")

startCycle
blah
不是作为函数编写的,而是作为普通值编写的。F#中的
let
关键字用于这两种情况。别担心,这是一个非常常见的来源,困惑的人新的语言

要创建一个不带参数的函数,您需要输入一个
单元
的“虚拟”参数,该参数写为
()


然后这样调用:
Commands.startCycle()

startCycle
blah
不是作为函数编写的,而是作为普通值编写的。F#中的
let
关键字用于这两种情况。别担心,这是一个非常常见的来源,困惑的人新的语言

要创建一个不带参数的函数,您需要输入一个
单元
的“虚拟”参数,该参数写为
()


然后这样调用:
Commands.startCycle()

可以显示整个源文件吗?如果
startCycle
blah
只是需要进行副作用评估的变量,然后触发
printfn
表达式是有意义的。所有不是函数且处于模块级的let绑定都会执行一次,并且在访问该模块中的任何值或函数时只执行一次。让您的绑定适合此类别。您能显示整个源文件吗?如果
startCycle
blah
只是需要进行副作用评估的变量,然后触发
printfn
表达式是有意义的。所有不是函数且处于模块级的let绑定都会执行一次,并且在访问该模块中的任何值或函数时只执行一次。让您的绑定适合此类别。
let startCycle () =
    printfn "startCycle"
    (0, "")