.net core F#在表达式末尾不返回
我有一个问题,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”,并在点击
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, "")